char *ip_to_hex(char const *ip) { if (ip == NULL) return NULL; if (strchr(ip, ':') == NULL) { unsigned char dst[sizeof(struct in_addr)]; if (inet_pton(AF_INET, ip, dst) <= 0) return NULL; return buf2hex(sizeof dst, dst); } unsigned char dst[sizeof(struct in6_addr)]; if (inet_pton(AF_INET6, ip, dst) <= 0) return NULL; int i; for (i = 0; i < 10; ++i) if (dst[i] != 0) break; if (i < 10 || dst[10] != 0xffU || dst[11] != 0xffU) return buf2hex(16, dst); return buf2hex(4, &dst[12]); }
INT DecodePasswordByUsername(CHAR *username, CHAR *encodedstr, CHAR *decoded) { BYTE md5[16]; des3_context ctx3; BYTE output[16]; BYTE encoded[16]; CHAR vn[200]; #ifdef _WIN32 DWORD sn; GetVolumeInformation("C:\\", vn, sizeof(vn), &sn, NULL, NULL, NULL, 0); snprintf(vn, sizeof(vn), "%s%x", username, sn); #else snprintf(vn, sizeof(vn), "%s", username); #endif //MD5Buffer(username, strlen(username), md5); MD5Buffer(vn, strlen(vn), md5); hex2buf(encodedstr, encoded, NULL); des3_set_3keys( &ctx3, md5, md5 + 8, md5); des3_decrypt( &ctx3, (BYTE *)encoded, output); des3_set_3keys( &ctx3, md5, md5 + 8, md5); des3_decrypt( &ctx3, (BYTE *)encoded + 8, output + 8); buf2hex(output, 16, decoded); return OK; }
int main(int argc, char *argv[]) { char *binstr=NULL; unsigned char *teststr= (unsigned char*)"asdf"; size_t teststr_len = strlen( (const char*)teststr ) +1; printf("buf2hex(%s, &binstr) = %s\n", teststr, buf2hex(teststr, teststr_len, &binstr)); }
VOID userconfig_set_username(USERCONFIG *userconfig, CHAR *username) { strcpy(userconfig->szUsername, ""); if(username) strcpy(userconfig->szUsername, username); MD5Buffer(userconfig->szUsername, strlen(userconfig->szUsername), userconfig->md5Username); buf2hex(userconfig->md5Username, 16, userconfig->szMD5Username); }
VOID userconfig_set_password(USERCONFIG *userconfig, CHAR *password) { strcpy(userconfig->szPassword, ""); if(password) strcpy(userconfig->szPassword, password); MD5Buffer(userconfig->szPassword, strlen(userconfig->szPassword), userconfig->md5Password); buf2hex(userconfig->md5Password, 16, userconfig->szMD5Password); //we will never use the real password, clean it for security. strcpy(userconfig->szPassword, ""); }
INT WINAPI mytunetsvc_set_user_config(CHAR *username, CHAR *password, BOOL isMD5Pwd, CHAR *adapter, INT limitation, INT language) { BYTE md5[16]; CHAR pwd[200]; CHAR encoded[100]; CHAR *szConfigFile = mytunetsvc_config_file(); if(!isMD5Pwd) { MD5Buffer(password, strlen(password), md5); buf2hex(md5, 16, pwd); //puts("Not MD5"); } else { if(strlen(password) != 32 && strlen(password) != 0) return ERR; strcpy(pwd, password); } EncodePasswordByUsername(username, pwd, encoded); setting_write(szConfigFile, "username", username); if(isMD5Pwd && strlen(password) == 0) setting_write(szConfigFile, "password", ""); else setting_write(szConfigFile, "password", encoded); setting_write(szConfigFile, "adapter", adapter); setting_write_int(szConfigFile, "limitation", limitation); setting_write_int(szConfigFile, "language", language); return OK; }
static VOID dot1x_loop_recv_proc(ETHCARD *ethcard, BYTE *pkt_data, INT pkt_len) { BYTE tmpbuf[100]; EAPOL_RANDSTREAM_PACKET * stmpkt = (EAPOL_RANDSTREAM_PACKET *)pkt_data; EAPOL_PACKET_HEADER *pkthdr = (EAPOL_PACKET_HEADER *)pkt_data; /* INT i,j; dprintf("dot1x_loop_recv_proc\n"); for (i=0; i<pkt_len; i++) dprintf("%.2x ", pkt_data[i]); dprintf("Recv: \n DEST: "); for(i = 1, j = 0; j < 6; i++,j++) { dprintf("%.2x ", pkt_data[i-1]); } dprintf("\nSRC : "); for(j = 0; j < 6; i++,j++) { dprintf("%.2x ", pkt_data[i-1]); } i += 2; //0x888E dprintf("\nDATA:\n"); for (j =1 ; (i < pkt_len ) ; i++, j++) { dprintf("%.2x ", pkt_data[i-1]); if ( (j % 16) == 0) dprintf("\n"); } dprintf("\n"); */ #define FNAME "dot1x_loop_recv_proc" if (!pkt_data) dprintf(FNAME": !pkt_data error\n"); if (!pkt_len) dprintf(FNAME": !pkt_len error\n"); if (memcmp(pkthdr->dest, hex2buf(userconfig.szMac, tmpbuf, NULL), 6) != 0) { hex2buf(DOT1XMAC, tmpbuf, NULL); if (memcmp(pkthdr->dest, tmpbuf, 6) != 0) { char tempbuf[100]; dprintf(FNAME": Not our packet\n"); buf2hex(pkthdr->dest, 6, tempbuf); dprintf(FNAME": packet dest: %s\n", tempbuf); dprintf(FNAME": our addr: %s\n", userconfig.szMac); } } if (pkthdr->tag != 0x8e88) dprintf(FNAME": proto error : %x\n", pkthdr->tag); #undef FNAME if(pkt_data && pkt_len && memcmp(pkthdr->dest, hex2buf(userconfig.szMac, tmpbuf, NULL), 6) == 0 && (pkthdr->tag == 0x8e88)) { logs_append(g_logs, "DOT1X_RECV", NULL, pkt_data, pkt_len); os_tick_clear(tick_timeout); switch (pkthdr->eapol_type) { case EAP_PACK_TYPE: //dprintf("EAP_PACK_TYPE receiveID = %d code = %d\n", pkthdr->identifier, pkthdr->code); switch (pkthdr->code) { case EAP_REQUEST: switch(pkthdr->type) { case EAP_TYPE_ID: logs_append(g_logs, "DOT1X_RECV_PACK", "EAP_REQUEST", NULL, 0); dot1x_state = DOT1X_STATE_RESPONSE; dot1x_logon_send_username(pkthdr->identifier); break; case EAP_TYPE_MD5: if(sizeof(EAPOL_PACKET_HEADER) + sizeof(stmpkt->streamlen) + stmpkt->streamlen <= (UINT32)pkt_len) { logs_append(g_logs, "DOT1X_RECV_PACK", "EAP_REQUEST(AUTH)", NULL, 0); dot1x_state = DOT1X_STATE_AUTH; dot1x_logon_auth(pkthdr->identifier, stmpkt->stream, stmpkt->streamlen); } else { dot1x_state = DOT1X_STATE_LOGIN; dot1x_logon_request(); } break; } //dprintf(" EAP_REQUEST\n"); /* if( dot1x_state == DOT1X_STATE_LOGIN || dot1x_state == DOT1X_STATE_SUCCESS || dot1x_state == DOT1X_STATE_FAILURE) { logs_append(g_logs, "DOT1X_RECV_PACK", "EAP_REQUEST", NULL, 0); dot1x_state = DOT1X_STATE_RESPONSE; dot1x_logon_send_username(pkthdr->identifier); } else if(dot1x_state == DOT1X_STATE_RESPONSE) { //dprintf(" streamlen = %d\n", stmpkt->streamlen); if(sizeof(EAPOL_PACKET_HEADER) + sizeof(stmpkt->streamlen) + stmpkt->streamlen <= (UINT32)pkt_len) { logs_append(g_logs, "DOT1X_RECV_PACK", "EAP_REQUEST(AUTH)", NULL, 0); dot1x_state = DOT1X_STATE_AUTH; dot1x_logon_auth(pkthdr->identifier, stmpkt->stream, stmpkt->streamlen); } else { //dprintf(" ERROR WHEN RECV STREAM !! Retry ...\n"); dot1x_state = DOT1X_STATE_LOGIN; dot1x_logon_request(); } } */ break; case EAP_RESPONSE: logs_append(g_logs, "DOT1X_RECV_PACK", "EAP_RESPONSE", NULL, 0); //dprintf(" EAP_RESPONSE\n"); break; case EAP_SUCCESS: logs_append(g_logs, "DOT1X_RECV_PACK", "EAP_SUCCESS", NULL, 0); //dprintf(" EAP_SUCCESS\n"); dot1x_state = DOT1X_STATE_SUCCESS; break; case EAP_FAILURE: //TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!! if(dot1x_state == DOT1X_STATE_LOGOUT) { logs_append(g_logs, "DOT1X_RECV_PACK", "EAP_FAILURE(LOGOUT)", NULL, 0); //dprintf(" EAP_FAILURE(LOGOUT)\n"); dot1x_state = DOT1X_STATE_NONE; //Here, we finished stopping DOT1X !!!! logs_append(g_logs, "DOT1X_STOP", "END", NULL, 0); break; } else { logs_append(g_logs, "DOT1X_RECV_PACK", "EAP_FAILURE", NULL, 0); //dprintf(" EAP_FAILURE\n"); dot1x_state = DOT1X_STATE_FAILURE; if(userconfig.bRetryDot1x) { // keep retrying ... dot1x_logon_request(); } } break; default: logs_append(g_logs, "DOT1X_RECV_PACK", "UNKNOWN", NULL, 0); //dprintf(" Unknown EAP_TYPE\n"); } break; case EAPOL_START: logs_append(g_logs, "DOT1X_RECV_START", NULL, NULL, 0); //dprintf("EAPOL_START\n"); break; case EAPOL_LOGOFF: logs_append(g_logs, "DOT1X_RECV_LOGOFF", NULL, NULL, 0); //dprintf("EAPOL_LOGOFF\n"); break; case EAPOL_KEY: logs_append(g_logs, "DOT1X_RECV_KEY", NULL, NULL, 0); //dprintf("EAPOL_KEY\n"); break; case EAPOL_ASF_ALERT: logs_append(g_logs, "DOT1X_RECV_ASF_ALERT", NULL, NULL, 0); //dprintf("EAPOL_ASF_ALERT\n"); break; default: logs_append(g_logs, "DOT1X_RECV_UNKNOWN", NULL, NULL, 0); return; } //dprintf("\n\n"); } else { //it's not the packet for us } }
int batch_insert_stripe_info(lmgr_t *p_mgr, pktype *pklist, int *validators, attr_set_t **p_attrs, unsigned int count, bool update_if_exists) { bool first; int i, rc = 0; int total_si; GString *req = g_string_new(""); attr_mask_t tmp_mask = { ATTR_MASK_stripe_info, 0, 0LL }; if (!attr_mask_is_null(sum_masks(p_attrs, count, tmp_mask))) { /* build batch request for STRIPE_INFO table */ g_string_assign(req, "INSERT INTO " STRIPE_INFO_TABLE " (" STRIPE_INFO_FIELDS ") VALUES "); first = true; for (i = 0; i < count; i++) { /* no request if the entry has no stripe info */ if (!ATTR_MASK_TEST(p_attrs[i], stripe_info)) continue; g_string_append_printf(req, "%s(" DPK ",%d,%u,%u,'%s')", first ? "" : ",", pklist[i], validators[i], ATTR(p_attrs[i], stripe_info).stripe_count, (unsigned int)ATTR(p_attrs[i], stripe_info).stripe_size, ATTR(p_attrs[i], stripe_info).pool_name); first = false; } if (update_if_exists) /* append "on duplicate key ..." */ g_string_append(req, " ON DUPLICATE KEY UPDATE " STRIPE_INFO_SET_VALUES); if (!first) { /* do nothing if no entry had stripe info */ rc = db_exec_sql(&p_mgr->conn, req->str, NULL); if (rc) goto out; } /* reset the string */ g_string_assign(req, ""); } /* Stripe items more tricky because we want to delete previous items * on update. */ /* If update_if_exists is false, insert them all as a batch. * For the update case, remove previous items before bluk insert. */ if (update_if_exists) { for (i = 0; i < count; i++) { /* no request if the entry has no stripe items */ if (!ATTR_MASK_TEST(p_attrs[i], stripe_items)) continue; g_string_printf(req, "DELETE FROM " STRIPE_ITEMS_TABLE " WHERE id=" DPK, pklist[i]); rc = db_exec_sql(&p_mgr->conn, req->str, NULL); if (rc) goto out; } } /* bulk insert stripe items (if any is set) */ tmp_mask.std = ATTR_MASK_stripe_items; if (attr_mask_is_null(sum_masks(p_attrs, count, tmp_mask))) goto out; total_si = 0; first = true; g_string_assign(req, "INSERT INTO " STRIPE_ITEMS_TABLE " (" STRIPE_ITEMS_FIELDS ") VALUES "); /* loop on all entries and all stripe items */ for (i = 0; i < count; i++) { int s; const stripe_items_t *p_items; /* skip the entry if it has no stripe items */ if (!ATTR_MASK_TEST(p_attrs[i], stripe_items)) continue; p_items = &ATTR(p_attrs[i], stripe_items); for (s = 0; s < p_items->count; s++) { char buff[2 * STRIPE_DETAIL_SZ + 1]; total_si++; if (buf2hex (buff, sizeof(buff), (unsigned char *)(&p_items->stripe[s].ost_gen), STRIPE_DETAIL_SZ) < 0) { DisplayLog(LVL_CRIT, LISTMGR_TAG, "Buffer too small to store details stripe info"); memset(buff, 0, sizeof(buff)); } g_string_append_printf(req, "%s(" DPK ",%u,%u,x'%s')", first && (s == 0) ? "" : ",", pklist[i], s, p_items->stripe[s].ost_idx, buff); first = false; } } /* only execute it if there was some stripe items */ if (total_si > 0) rc = db_exec_sql(&p_mgr->conn, req->str, NULL); out: g_string_free(req, TRUE); return rc; }