static int cmd_syslog(const char *args[]) { char b1[32], b2[32]; if (args[0] && !strcmp(args[0], "off")) { syslog_addr.daddr = 0; return 0; } if (!args[1]) { pp_printf("use: syslog <ipaddr> <macaddr> (or just \"off\"\n"); return -1; } decode_ip(args[0], (void *)&syslog_addr.daddr); decode_mac(args[1], syslog_mac); pp_printf("Syslog parameters: %s, %s\n", format_ip(b1, (void *)&syslog_addr.daddr), format_mac(b2, syslog_mac)); tics = 0; /* send the first frame immediately to the new host */ return 0; }
static int mongo_authorize(void *instance, REQUEST *request) { if (request->username == NULL) return RLM_MODULE_NOOP; rlm_mongo_t *data = (rlm_mongo_t *) instance; char password[MONGO_STRING_LENGTH] = ""; char mac[MONGO_STRING_LENGTH] = ""; if (strcmp(data->mac_field, "") != 0) { char mac_temp[MONGO_STRING_LENGTH] = ""; radius_xlat(mac_temp, MONGO_STRING_LENGTH, "%{Calling-Station-Id}", request, NULL); format_mac(mac_temp, mac); } if (!find_radius_options(data, request->username->vp_strvalue, mac, password)) { return RLM_MODULE_REJECT; } RDEBUG("Authorisation request by username -> \"%s\"\n", request->username->vp_strvalue); RDEBUG("Password found in MongoDB -> \"%s\"\n\n", password); VALUE_PAIR *vp; /* quiet the compiler */ instance = instance; request = request; vp = pairmake("Cleartext-Password", password, T_OP_SET); if (!vp) return RLM_MODULE_FAIL; pairmove(&request->config_items, &vp); pairfree(&vp); return RLM_MODULE_OK; }
int syslog_poll(void) { struct wr_sockaddr addr; char buf[256]; char b[32]; unsigned char mac[6]; unsigned char ip[4]; static uint32_t down_tics; int len = 0; uint32_t now; /* for temperature state */ static uint32_t next_temp_report, next_temp_check; /* for servo-state (accesses ppsi internal variables */ extern struct pp_instance *ppi; struct wr_servo_state *s; static uint32_t prev_tics; static int track_ok_count, prev_servo_state = -1; if (IS_HOST_PROCESS) s = NULL; else s = &((struct wr_data *)ppi->ext_data)->servo_state; if (ip_status == IP_TRAINING) return 0; if (!syslog_addr.daddr) return 0; now = timer_get_tics(); if (!tics) { /* first time ever, or new syslog server */ tics = now - 1; get_mac_addr(mac); len = syslog_header(buf, SYSLOG_DEFAULT_LEVEL, ip); len += pp_sprintf(buf + len, "(%s) Node up " "since %i seconds", format_mac(b, mac), (tics - tics_zero) / 1000); goto send; } if (link_status == LINK_WENT_DOWN) down_tics = now; if (link_status == LINK_UP && down_tics) { down_tics = now - down_tics; len = syslog_header(buf, SYSLOG_DEFAULT_LEVEL, ip); len += pp_sprintf(buf + len, "Link up after %i.%03i s", down_tics / 1000, down_tics % 1000); down_tics = 0; goto send; } if (!prev_tics) prev_tics = now; if (s && s->state == WR_TRACK_PHASE && prev_servo_state != WR_TRACK_PHASE) { /* we reached sync: log it */ track_ok_count++; prev_servo_state = s->state; prev_tics = now - prev_tics; if (track_ok_count == 1) { len = syslog_header(buf, SYSLOG_DEFAULT_LEVEL, ip); len += pp_sprintf(buf + len, "Tracking after %i.%03i s", prev_tics / 1000, prev_tics % 1000); goto send; } len = syslog_header(buf, SYSLOG_DEFAULT_LEVEL, ip); len += pp_sprintf(buf + len, "%i-th re-rtrack after %i.%03i s", track_ok_count, prev_tics / 1000, prev_tics % 1000); goto send; } if (s && s->state != WR_TRACK_PHASE && prev_servo_state == WR_TRACK_PHASE) { prev_servo_state = s->state; prev_tics = now; len = syslog_header(buf, SYSLOG_DEFAULT_LEVEL, ip); len += pp_sprintf(buf + len, "Lost track"); goto send; } if (!next_temp_check) { next_temp_check = now + 1000; next_temp_report = 0; } if (time_after_eq(now, next_temp_check)) { struct wrc_onetemp *t = NULL; int over_t = 0; next_temp_check += 1000; while ( (t = wrc_temp_getnext(t)) ) over_t += (t->t > (CONFIG_TEMP_HIGH_THRESHOLD << 16)); /* report if over temp, and first report or rappel time */ if (over_t && (!next_temp_report || time_after_eq(now, next_temp_report))) { next_temp_report = now + 1000 * CONFIG_TEMP_HIGH_RAPPEL; len = syslog_header(buf, SYSLOG_DEFAULT_LEVEL, ip); len += pp_sprintf(buf + len, "Temperature high: "); len += wrc_temp_format(buf + len, sizeof(buf) - len); goto send; } if (!over_t && next_temp_report) { next_temp_report = 0; len = syslog_header(buf, SYSLOG_DEFAULT_LEVEL, ip); len += pp_sprintf(buf + len, "Temperature ok: "); len += wrc_temp_format(buf + len, sizeof(buf) - len); goto send; } } return 0; send: memcpy(&syslog_addr.saddr, ip, 4); fill_udp((void *)buf, len, &syslog_addr); memcpy(&addr.mac, syslog_mac, 6); ptpd_netif_sendto(syslog_socket, &addr, buf, len, 0); return 1; }
/** * Format a Packet Header */ int cw_format_pkt_hdr(char *dst,int level,struct conn *conn, uint8_t * packet, int len,struct sockaddr *from) { char *s=dst; switch (level) { case DBG_PKT_IN: if (cw_get_hdr_flag_f(packet)){ s+=sprintf(s,"Fragment from %s",sock_addr2str_p(from)); } else{ s+=sprintf(s,"From %s",sock_addr2str_p(from)); } break; case DBG_PKT_OUT: if (cw_get_hdr_flag_f(packet)){ s+=sprintf(s,"Fragment to %s",sock_addr2str(from)); } else{ s+=sprintf(s,"To %s",sock_addr2str(from)); } break; } s+=sprintf(s," l=%d: ",len); int preamble = cw_get_hdr_preamble(packet); if (preamble==01){ s+=sprintf(s," (encrypted)"); return s-dst; } if (len<4) goto abort; /* if (cw_get_hdr_flag_f(packet)){ s+=sprintf(s," (fragmented)"); } */ int hlen = cw_get_hdr_hlen(packet); int rid = cw_get_hdr_rid(packet); int wbid = cw_get_hdr_wbid(packet); s+=sprintf(s," H:%d R:%02d W:%02d",hlen,rid,wbid); s+=sprintf(s," Flgs:"); s+=format_hdr_flags(s,packet); if (len<8) goto abort; int frag_id = cw_get_hdr_fragid(packet); int frag_offs = cw_get_hdr_fragoffset(packet); s+=sprintf(s," Frag/Offs:%d/%d",frag_id,frag_offs); if (cw_get_hdr_flag_m(packet)) { /* rmac is present, print the rmac */ int rmac_len=cw_get_hdr_rmac_len(packet); int plen=rmac_len; if (rmac_len+8>len) plen=len-8; if (rmac_len>10) plen=10; s+=sprintf(s," R-MAC:"); s+=format_mac(s,cw_get_hdr_rmac_data(packet),plen); if (rmac_len>10){ s+=sprintf(s," ... (len=%d)",rmac_len); } } if (cw_get_hdr_flag_w(packet)){ /* print wireless specific info */ int ws_len = cw_get_hdr_ws_len(packet); int plen = ws_len > 20 ? 20:ws_len; s+=sprintf(s," WS:"); s+=format_hexu(s,cw_get_hdr_ws_data(packet),plen); if (ws_len>20){ s+=sprintf(s," ... (len=%d)",ws_len); } } return s-dst; abort: s+=sprintf(s," Incomplete..."); return s-dst; }