Example #1
0
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]);
}
Example #2
0
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;
}
Example #3
0
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));
}
Example #4
0
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);
}
Example #5
0
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, "");
}
Example #6
0
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;
}
Example #7
0
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
    }

}
Example #8
0
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;
}