int read_record(FILE *fp, struct log_entry *entry) { char buffer[REFERER_MAXLEN]; int ret; int seconds; ret = fscanf(fp, "%d.%d | %d | " "%" TO_STR(IP_MAXLEN) "s | " "%" TO_STR(HEAD_ST_MAXLEN) "s | " "%d | " "%" TO_STR(METHOD_MAXLEN) "s | " "%" TO_STR(URI_MAXLEN) "s | " "%" TO_STR(USERNAME_MAXLEN) "s | " "%" TO_STR(HSTATUS_MAXLEN) "s | " "%" TO_STR(MIMETYPE_MAXLEN) "s | " "%d | ", &entry->time, &seconds, &entry->elaps, entry->ipaddr, entry->head_st, &entry->len, entry->method, entry->uri, entry->username, entry->h_status, entry->mime_type, &entry->port); if (get_user_agent(fp, buffer, USERAGENT_MAXLEN, entry->user_agent) == -1 || get_referer(fp, buffer, REFERER_MAXLEN, entry->referer) == -1) return -1; if (ret < 2) return 1; return 0; }
static const char *get_login_referer(void) { const char *referer = get_referer(); const char *ref; if (!strcmp(referer, "/") || !strcmp(referer, "/index.htm")) ref = "sec"; else ref = referer; return ref; }
void write_referer(CRegKey& _key_product) { CAtlString referer = get_referer(); _key_product.SetStringValue(L"referer", referer); ULONG len = 1024; wchar_t buffer[1025]; if (_key_product.QueryStringValue(L"referer_first", buffer, &len) != ERROR_SUCCESS) _key_product.SetStringValue(L"referer_first", referer); }