/*---------------------------------------------------------------------------
 * log.cgi Ver1.0
 * CSV出力アクセスログ
 * for UNIX
 *
 * Copyright(C) 1998 Masahiro Nakayama All rights reserved.
 * e-mail:ruri@mtd.biglobe.ne.jp
 * website:http://www4.big.or.jp/~enne/klabo/index.html
 *
 *
 * [ usage ]
 *  log.cgi <Path> <Opt1> <Opt2>
 *-------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>


static const char *weekday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};


int main( int argc, char **argv ){
	int i;							/*--- カウンタ ---*/
	int count;						/*--- name&valueの組数 ---*/
	char *useragent,*refer,*host;	/*--- 環境変数 ---*/
	char wfname[50],fname[20];		/*--- ファイルネーム格納 ---*/
	char **name, **value;			/*--- クエリーデータ格納 ---*/
	FILE *fp;
	struct tm *gmt;					/*--- sys/time.hのtm構造体 ---*/
	time_t ti;

	/* Customized Start  by Akihiro Nagase */

	char *addr;				/* IP Address */
	char cginame1[40];		/* cgi区別用(1) */
	char cginame2[40];		/* cgi区別用(2) */
	char *user;			/* 基本認証 利用者名 */
	char path[256];		/* Output Path */

	/* Customized End    by Akihiro Nagase */
	
	ti = time(NULL);    /*GMT→JST変換*/
	ti += 9*60*60;
	gmt = gmtime(&ti);

/* Comment by Akihiro Nagase
	for(i = 0; i < count; i++){
		if(strcmp(*(name + i),"file") == 0)
			strcpy(fname,*(value + i));
	}
*/
	
/* Customized Start  by Akihiro Nagase */
	if( argc >= 2 )
	{
		strcpy( path, argv[1] );
	} else 
	{
		strcpy( path, "./" );
	}

	if( argc >= 3 )
	{
		strcpy( cginame1, argv[2] );
		if( argc >= 4 )
		{
			strcpy( cginame2, argv[3] );
		} else {
			strcpy( cginame2, "\0" );
		}
	} else {
		strcpy( cginame1, "\0" );
		strcpy( cginame2, "\0" );
	}

/*
	for(i = 0; i < count; i++){
		if(strcmp(*(name + i),"name") == 0)
			strcpy(cginame,*(value + i));
	}
*/

/* Customized End    by Akihiro Nagase */

	
	/*各種環境変数取得*/
	if((refer = getenv("HTTP_REFERER")) == NULL){
		refer = "\0";
	}
	if((useragent = getenv("HTTP_USER_AGENT")) == NULL){
		useragent = "\0";
	}	
	if((host = getenv("REMOTE_HOST")) == NULL){
		if((host = getenv("REMOTE_ADDR")) == NULL){
			host = "\0";
		}
	}

/* Customized Start  by Akihiro Nagase */

	if((addr = getenv("REMOTE_ADDR")) == NULL){
		addr = "\0";
	}

	if((user = getenv("REMOTE_USER")) == NULL){
		user = "\0";
	}

/* Customized End    by Akihiro Nagase */

	
/*---------------------------------------------------------------------------
 * 現在の日時や月を入れることによって、その時間ごと、日付ごとに別ファイルに
 * ログをとることが可能です。
 * gmt->tm_year   年（下二桁）
 * gmt->tm_mon    月
 * gmt->tm_mday   日
 * gmt->tm_wday   曜日を順番に番号に変換
 * gmt->tm_hour   時
 * gmt->tm_min    分
 * gmt->tm_sec    秒
 *-------------------------------------------------------------------------*/
	sprintf(wfname,"%s19%02d%02d%02d.csv",path,gmt->tm_year,gmt->tm_mon + 1,gmt->tm_mday);
	if((fp = fopen(wfname,"a")) == NULL){
		puts("Could not open file !");
		exit(1);
	}

	/*記録するログのフォーマット*/
	/*           Year  Mon  Day  Week  Hour  Min  Sec  Host   Addr   Ref   Agent   Name   User  */
	fprintf(fp, "19%02d,%02d,%02d,\"%s\",%02d,%02d,%02d,\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"\n",
				gmt->tm_year, (gmt->tm_mon + 1), gmt->tm_mday, weekday[gmt->tm_wday], gmt->tm_hour, gmt->tm_min, gmt->tm_sec,
				host, addr, refer, useragent, cginame1, cginame2, user);
	fclose(fp);
	return 0;
}

