#include <stdio.h>
#include <mysql.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define IP_BUFFER_SIZE 16
#define ERR_BUFFER_SIZE 1024
#define SQL_COMMAND_SIZE 1024
#define SUCCESS 0
#define ERROR -1
int main(int argc, char **argv);
int getDB_IP(char *myhost, char *mydb, char *myuser, char *mypasswd, char *ip, char *err_msg);
int putDB_IP(char *myhost, char *mydb, char *myuser, char *mypasswd, char *ip, char *err_msg);
int getPPP0_IP(char *ip);
void usage(void);
int
main(int argc, char **argv)
{
char db_ip[IP_BUFFER_SIZE];
char ppp0_ip[IP_BUFFER_SIZE];
char err_msg[ERR_BUFFER_SIZE];
int ret = SUCCESS;
if( argc == 5 )
{
if( getDB_IP(argv[1],argv[2],argv[3],argv[4],db_ip, err_msg) )
{
fprintf(stderr, "getDB_IP() Error : %s\n", err_msg);
ret = ERROR;
}
else
{
getPPP0_IP(ppp0_ip);
if( strcmp(db_ip, ppp0_ip) )
{
if( putDB_IP(argv[1],argv[2],argv[3],argv[4],ppp0_ip, err_msg) )
{
fprintf(stderr, "putDB_IP() Error : %s\n", err_msg);
ret = ERROR;
}
}
}
}
else
{
usage();
ret = ERROR;
}
return(ret);
}
int
getPPP0_IP(char *ip)
{
struct ifreq ifr;
int s;
*ip = (char)NULL;
if( (s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
perror("Socket Error!! ");
return(ERROR);
}
strcpy(ifr.ifr_name, "ppp0");
if( ioctl(s, SIOCGIFADDR, &ifr) )
{
perror("Socket Error!! ");
close(s);
return(ERROR);
}
strncpy(ip, inet_ntoa(((struct sockaddr_in *)&(ifr.ifr_addr))->sin_addr), IP_BUFFER_SIZE);
close(s);
return(SUCCESS);
}
int
getDB_IP(char *myhost, char *mydb, char *myuser, char *mypasswd, char *ip, char *err_msg)
{
MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;
int ret = SUCCESS;
mysql_init(&mysql);
if( mysql_real_connect(&mysql, myhost, myuser, mypasswd, mydb, 0, NULL, 0) )
{
if( mysql_query(&mysql,"select ip from iplog order by adate desc,atime desc limit 0,1") )
{
strncpy(err_msg, mysql_error(&mysql), ERR_BUFFER_SIZE);
ret = ERROR;
}
else
{
if( (result = mysql_store_result(&mysql)) )
{
row = mysql_fetch_row(result);
strncpy(ip, row[0], IP_BUFFER_SIZE);
}
else
{
strncpy(err_msg, mysql_error(&mysql), ERR_BUFFER_SIZE);
ret = ERROR;
}
mysql_free_result(result);
}
}
else
{
strncpy(err_msg, mysql_error(&mysql), ERR_BUFFER_SIZE);
ret = ERROR;
}
mysql_close(&mysql);
return(ret);
}
int
putDB_IP(char *myhost, char *mydb, char *myuser, char *mypasswd, char *ip, char *err_msg)
{
MYSQL mysql;
char sqlcommand[SQL_COMMAND_SIZE];
int ret = SUCCESS;
sprintf(sqlcommand, "insert into iplog (adate,atime,ip) values (CURDATE(),CURTIME(),'%s')", ip);
mysql_init(&mysql);
if( mysql_real_connect(&mysql, myhost, myuser, mypasswd, mydb, 0, NULL, 0) )
{
if( mysql_query(&mysql, sqlcommand) )
{
strncpy(err_msg, mysql_error(&mysql), ERR_BUFFER_SIZE);
ret = ERROR;
}
}
else
{
strncpy(err_msg, mysql_error(&mysql), ERR_BUFFER_SIZE);
ret = ERROR;
}
mysql_close(&mysql);
return(ret);
}
void
usage(void)
{
printf("usage : adslip host db user passwd\n");
}
|