During the initialization net/rtg uses the /tmp/mysql.sql and /tmp/rtg.sql to store the SQL commands executed in the database with special user privileges. Using well known files can lead to a race condition between two process who uses the same file names and allow file tampering by a malicious user. This fix uses mktemp command to create temporary files in a safe way PR: 238262 Submitted by: rodrigo Approved by: freebsd-ports@dan.me.uk (maintainer timeout) MFH: 2019Q3
161 lines
4.9 KiB
Plaintext
161 lines
4.9 KiB
Plaintext
--- etc/createdb.in.orig 2003-01-22 19:07:02 UTC
|
|
+++ etc/createdb.in
|
|
@@ -15,6 +15,8 @@
|
|
RTGPASS="rtgdefault"
|
|
DATABASE="rtg"
|
|
USER="snmp"
|
|
+MYSQL_FILE=`mktemp -q /tmp/mysql.XXXXXX`
|
|
+RTG_FILE=`mktemp -q /tmp/rtg.XXXXXX`
|
|
|
|
echo ""
|
|
echo "$0 setting up MySQL database for RTG."
|
|
@@ -22,103 +24,98 @@
|
|
echo ""
|
|
|
|
# Create the necessary SQL in two /tmp files
|
|
-cat <<EOT >/tmp/mysql.sql
|
|
-INSERT INTO user (Host, User, Password) VALUES ('$HOST','$USER',PASSWORD("$RTGPASS"));
|
|
-INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
|
|
-Create_priv, Drop_priv, Grant_priv, References_priv, Index_priv, Alter_priv)
|
|
-VALUES ('$HOST','$DATABASE','$USER','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
|
|
-FLUSH PRIVILEGES;
|
|
+cat <<EOT >$MYSQL_FILE
|
|
+CREATE USER '$USER'@'$HOST' IDENTIFIED BY '$RTG_PASS';
|
|
+GRANT ALL ON '$DATABASE'.* TO '$USER'@'$HOST';
|
|
EOT
|
|
|
|
-cat <<EOT >/tmp/rtg.sql
|
|
+cat <<EOT >$RTG_FILE
|
|
#
|
|
# Table structure for table 'router'
|
|
#
|
|
|
|
-CREATE TABLE router (
|
|
- rid int(11) unsigned NOT NULL auto_increment,
|
|
- name char(120) NOT NULL default '',
|
|
- pop char(10) NOT NULL default '',
|
|
- popid tinyint(3) unsigned NOT NULL default '0',
|
|
- PRIMARY KEY (rid)
|
|
+CREATE TABLE `router` (
|
|
+ `rid` int(11) unsigned NOT NULL auto_increment,
|
|
+ `name` char(120) NOT NULL default '',
|
|
+ `pop` char(10) NOT NULL default '',
|
|
+ `popid` tinyint(3) unsigned NOT NULL default '0',
|
|
+ PRIMARY KEY (`rid`)
|
|
);
|
|
|
|
#
|
|
# Table structure for table 'interface'
|
|
#
|
|
|
|
-CREATE TABLE interface (
|
|
- id int(11) unsigned NOT NULL auto_increment,
|
|
- name char(255) NOT NULL default '',
|
|
- rid int(11) NOT NULL default '0',
|
|
- speed bigint(11) default NULL,
|
|
- description char(255) default NULL,
|
|
- status enum('active','inactive') default 'active',
|
|
- PRIMARY KEY (id)
|
|
+CREATE TABLE `interface` (
|
|
+ `id` int(11) unsigned NOT NULL auto_increment,
|
|
+ `name` char(255) NOT NULL default '',
|
|
+ `rid` int(11) NOT NULL default '0',
|
|
+ `speed` bigint(11) default NULL,
|
|
+ `description` char(255) default NULL,
|
|
+ `status` enum('active','inactive') default 'active',
|
|
+ PRIMARY KEY (`id`)
|
|
);
|
|
|
|
#
|
|
# Table structure for table 'ifInOctets'
|
|
#
|
|
|
|
-CREATE TABLE ifInOctets (
|
|
- id int(11) NOT NULL default '0',
|
|
- dtime datetime NOT NULL default '0000-00-00 00:00:00',
|
|
- counter bigint(20) NOT NULL default '0',
|
|
- KEY ifInOctets_idx (dtime)
|
|
+CREATE TABLE `ifInOctets` (
|
|
+ `id` int(11) NOT NULL default '0',
|
|
+ `dtime` datetime NOT NULL default '0000-00-00 00:00:00',
|
|
+ `counter` bigint(20) NOT NULL default '0',
|
|
+ KEY `ifInOctets_idx` (`dtime`)
|
|
);
|
|
|
|
#
|
|
# Table structure for table 'ifOutOctets'
|
|
#
|
|
|
|
-CREATE TABLE ifOutOctets (
|
|
- id int(11) NOT NULL default '0',
|
|
- dtime datetime NOT NULL default '0000-00-00 00:00:00',
|
|
- counter bigint(20) NOT NULL default '0',
|
|
- KEY ifOutOctets_idx (dtime)
|
|
+CREATE TABLE `ifOutOctets` (
|
|
+ `id` int(11) NOT NULL default '0',
|
|
+ `dtime` datetime NOT NULL default '0000-00-00 00:00:00',
|
|
+ `counter` bigint(20) NOT NULL default '0',
|
|
+ KEY `ifOutOctets_idx` (`dtime`)
|
|
);
|
|
|
|
#
|
|
# Table structure for table 'ifInUcastPkts'
|
|
#
|
|
|
|
-CREATE TABLE ifInUcastPkts (
|
|
- id int(11) NOT NULL default '0',
|
|
- dtime datetime NOT NULL default '0000-00-00 00:00:00',
|
|
- counter bigint(20) NOT NULL default '0',
|
|
- KEY ifInUcastPkts_idx (dtime)
|
|
+CREATE TABLE `ifInUcastPkts` (
|
|
+ `id` int(11) NOT NULL default '0',
|
|
+ `dtime` datetime NOT NULL default '0000-00-00 00:00:00',
|
|
+ `counter` bigint(20) NOT NULL default '0',
|
|
+ KEY `ifInUcastPkts_idx` (`dtime`)
|
|
);
|
|
|
|
#
|
|
# Table structure for table 'ifOutUcastPkts'
|
|
#
|
|
|
|
-CREATE TABLE ifOutUcastPkts (
|
|
- id int(11) NOT NULL default '0',
|
|
- dtime datetime NOT NULL default '0000-00-00 00:00:00',
|
|
- counter bigint(20) NOT NULL default '0',
|
|
- KEY ifOutUcastPkts_idx (dtime)
|
|
+CREATE TABLE `ifOutUcastPkts` (
|
|
+ `id` int(11) NOT NULL default '0',
|
|
+ `dtime` datetime NOT NULL default '0000-00-00 00:00:00',
|
|
+ `counter` bigint(20) NOT NULL default '0',
|
|
+ KEY `ifOutUcastPkts_idx` (`dtime`)
|
|
);
|
|
|
|
#
|
|
# Table structure for table 'ifInErrors'
|
|
#
|
|
|
|
-CREATE TABLE ifInErrors (
|
|
- id int(11) NOT NULL default '0',
|
|
- dtime datetime NOT NULL default '0000-00-00 00:00:00',
|
|
- counter bigint(20) NOT NULL default '0',
|
|
- KEY ifInErrors_idx (dtime)
|
|
+CREATE TABLE `ifInErrors` (
|
|
+ `id` int(11) NOT NULL default '0',
|
|
+ `dtime` datetime NOT NULL default '0000-00-00 00:00:00',
|
|
+ `counter` bigint(20) NOT NULL default '0',
|
|
+ KEY `ifInErrors_idx` (`dtime`)
|
|
);
|
|
EOT
|
|
|
|
echo "Adding user \"$USER\" to MySQL database..."
|
|
-cat /tmp/mysql.sql | $MYSQLBIN/mysql -u root -p$ROOTPASS mysql
|
|
+cat $MYSQL_FILE | $MYSQLBIN/mysql -u root -p$ROOTPASS mysql
|
|
echo "Creating RTG database \"$DATABASE\"..."
|
|
$MYSQLBIN/mysqladmin -u root -p$ROOTPASS create $DATABASE
|
|
-echo "Reloading MySQL privileges..."
|
|
-$MYSQLBIN/mysqladmin -u root -p$ROOTPASS flush-privileges
|
|
echo "Creating RTG tables..."
|
|
-cat /tmp/rtg.sql | $MYSQLBIN/mysql -u $USER -p$RTGPASS $DATABASE
|
|
+cat $RTG_FILE | $MYSQLBIN/mysql -u $USER -p$RTGPASS $DATABASE
|
|
echo "Done."
|