예제 #1
0
파일: ip.c 프로젝트: bg6cq/wlan-portal
void Stage2()			// setonline
{
	char *phone, *password, *p;
	char buf[MAXLEN];
	MYSQL_RES *mysql_res;
	MYSQL_ROW row;
	phone = GetValue("phone");
	if ((phone == NULL) || (phone[0] == 0))
		DisplayStage('0', "输入的电话号码为空", 1);
	CheckPhone(phone);
	strncpy(PHONE, phone, 12);
	password = GetValue("password");
	if ((password == NULL) || strlen(password) != 6)
		DisplayStage('1', "请输入密码", 1);

	snprintf(buf, MAXLEN, "select pass from PhonePass where phone='%s' and valid>now()", phone);
	mysql_res = ExecSQL(buf, 1);
	row = mysql_fetch_row(mysql_res);
	if (row == NULL)
		DisplayStage('0', "未查到一周内的电话号码信息,请重新输入", 1);
	if (strcmp(row[0], password) != 0) {
		DisplayStage('1', "密码错误,请重新输入", 1);
	}

	p = GetValue("timespan");
	if ((p == NULL) || (*p == 0))
		p = "1";
	else
		*(p + 1) = 0;
	if ((*p != '1') && (*p != '7'))
		p = "1";
	snprintf(buf, MAXLEN, "replace into MACPhone values('%s','%s',now(), date_add(now(), interval %s day))", MAC, PHONE, p);
	ExecSQL(buf, 0);
	snprintf(buf, MAXLEN, "insert into Log values('%s','%s','%s',now(),'online %s day')", remote_addr(), MAC, PHONE, p);
	ExecSQL(buf, 0);

	IPOnline((*p - '0') * 24 * 3600);
}
예제 #2
0
파일: ip.c 프로젝트: kelixin/wlan-portal
void Stage1() // sendsms, dispay input page
{
	char *phone,*p;
   	char buf[MAXLEN];
	char pass[MAXLEN];
	MYSQL_RES *mysql_res;
	MYSQL_ROW row;
	FILE *fp;
	p = GetValue("changenum");
	if ( p ) 
		DisplayStage('0',"请输入电话号码",0);
	phone = GetValue("phone");
	if( phone==NULL || phone[0]==0 ) 
		DisplayStage('0',"输入的电话号码为空",1);
	CheckPhone(phone);
	strncpy(PHONE,phone,12);	
	p = GetValue("havepass");
	if(p) 
		DisplayStage('1',"请输入密码",0);

	// 检查该设备当天是否发送过短信, 每天最多 MAXPERMAC
	snprintf(buf,MAXLEN,"select count from MACcount where MAC='%s' and sendday=curdate()",MAC);
	mysql_res = ExecSQL(buf,1);
	row = mysql_fetch_row(mysql_res);
	if( row ) {
		if( atoi(row[0]) >= MAXPERMAC ) {
			sprintf(buf,"每台设备每天允许%d手机登录,今天已经使用%s次,请换台设备再试",MAXPERMAC,row[0]);
			DisplayStage('0',buf,1);
		} 
		snprintf(buf,MAXLEN,"update MACcount set count=count+1 where MAC='%s' and sendday=curdate()",MAC);
		ExecSQL(buf,0);
	} else {
		snprintf(buf,MAXLEN,"replace into MACcount values ('%s', now(), 1)",MAC);
		ExecSQL(buf,0);
	}
	
	// 检查手机当天是否发送过短信, 每天最多 MAXPERPHONE
	snprintf(buf,MAXLEN,"select count from Phonecount where phone='%s' and sendday=curdate()",PHONE);
	mysql_res = ExecSQL(buf,1);
	row = mysql_fetch_row(mysql_res);
	if( row ) {
		if( atoi(row[0]) >= MAXPERPHONE ) {
			sprintf(buf,"每个手机每天允许%d短信,今天已经使用%s次,请换手机再试",MAXPERPHONE,row[0]);
			DisplayStage('0',buf,1);
		} 
		snprintf(buf,MAXLEN,"update Phonecount set count=count+1 where phone='%s' and sendday=curdate()",PHONE);
		ExecSQL(buf,0);
	} else {
		snprintf(buf,MAXLEN,"replace into Phonecount values ('%s', now(), 1)",PHONE);
		ExecSQL(buf,0);
	}

	snprintf(buf,MAXLEN,"select pass from PhonePass where phone='%s' and now()<valid",PHONE);
	mysql_res = ExecSQL(buf,1);
	row = mysql_fetch_row(mysql_res);
	if( row==NULL ) {
		srand(time(NULL));
		int i;
		for(i=0;i<6;i++) {
			int r;
			r=rand();
			pass[i]='0' + r%10;
		}
		pass[6]=0;
	} else 
		strncpy(pass,row[0],7);
	snprintf(buf,MAXLEN,"replace into PhonePass values ('%s', '%s', date_add(now(), interval 8 day) )",PHONE,pass);
	ExecSQL(buf,0);
	snprintf(buf,MAXLEN,"php /usr/src/sendsms/sendsms.php %s \"%s是您在中国科大访客WLAN密码,一周内都可以使用本密码登录,请保留本短信。\" 2>/dev/null",PHONE,pass);
	fp=popen(buf,"r");
	if(fp==NULL){
		snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'send pass error')",
			remote_addr(), MAC, PHONE);
		ExecSQL(buf,0);
		DisplayStage('0',"密码发送失败",1);
	}
	fgets(buf,MAXLEN,fp);
	if(strncmp(buf,"OK",2)==0) {
		snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'send pass ok')",
			remote_addr(), MAC, PHONE);
		ExecSQL(buf,0);
		DisplayStage('1',"请输入手机上收到的密码",0);
	} else {
		char tmp[MAXLEN];
		strncpy(tmp,buf,MAXLEN);
		snprintf(buf,MAXLEN,"insert into Log values('%s','%s','%s',now(),'send pass error %s')",
			remote_addr(), MAC, PHONE,tmp);
		ExecSQL(buf,0);
		DisplayStage('0',tmp,1);
	}
}