<?php include( "dnsfuncs.php" ); function db_connect() { $conn = pg_pconnect( "host=127.0.0.1 dbname=dns user=dns password=dns" ); if( !$conn ) { echo "<html>\n<body>\n"; echo "<b>unable to connect to database !!!</b>\n"; echo "</body>\n</html>\n"; } return $conn; } function db_begin_work( $conn ) { if( pg_exec( $conn, "begin work" ) ) { showVar( "begin", "done" ); return true; } else { echo "<b>SQL: begin work failed</b><br />\n"; return false; } } function db_commit_work( $conn ) { if( pg_exec( $conn, "commit work" ) ) { showVar( "commit", "done" ); return true; } else { echo "<b>SQL: commit work failed</b><br />\n"; pg_exec( $conn, "rollback" ); return false; } } function db_rollback_work( $conn ) { if( pg_exec( $conn, "rollback work" ) ) { showVar( "rollback", "done" ); return true; } else { echo "<b>SQL: rollback work failed</b><br />\n"; return false; } } function db_check_login( $conn, $user, $pass ) { if( !ereg( "^[a-zA-Z0-9]*$", $user ) ) { echo "illegal username<br />\n"; return false; } if( !ereg( "^[a-zA-Z0-9]*$", $pass ) ) { echo "illegal password<br />\n"; return false; } // add md5 hashes for password ++++++ $sql = "select du_id, du_admin from dnsuser where " . "du_name = '$user' and du_pass = '$pass' and " . "du_enabled = true and du_id_del is null"; showVar( "sql", $sql ); $rs = pg_exec( $conn, $sql ); if( $arr = pg_fetch_array( $rs ) ) { $_SESSION["dnsuser"] = $user; $_SESSION["dnsuid"] = $arr[0]; if( $arr[1] == "t" ) { $_SESSION["dnsadmin"] = true; } else { $_SESSION["dnsadmin"] = false; } $dnsuser = $user; $dnsuid = $arr[0]; $dnsadmin = $_SESSION["dnsadmin"]; $from = $_SERVER["REMOTE_ADDR"]; // ipdate entries where no logout happened $sql = "update dnsuserlog set dul_logout = CURRENT_TIMESTAMP where " . "dul_logout is null and du_id = $dnsuid"; pg_exec( $conn, $sql ); // log the login $sql = "insert into dnsuserlog ( " . "du_id, dul_login, dul_logout, dul_from " . ") values ( " . "$dnsuid, CURRENT_TIMESTAMP, null, '$from' " . ")"; pg_exec( $conn, $sql ); return true; } else { echo "not found on db<br />\n"; return false; } } function db_logout( $conn ) { $dnsuid = $_SESSION["dnsuid"]; $dnsuser = $_SESSION["dnsuser"]; $sql = "update dnsuserlog set dul_logout = CURRENT_TIMESTAMP where " . "dul_logout is null and du_id = $dnsuid"; pg_exec( $conn, $sql ); session_unregister( "dnsuser" ); session_unregister( "dnsuid" ); session_destroy(); $dnsuser = ""; $dnsuid = ""; } function db_domain_list( $conn, $id, $withnull, $uid, $var ) { if( $uid == 0 ) { $sql = "select dom_id, dom_name from domain order by dom_name"; } else { $sql = "select d.dom_id, dom_name from domain d, domainpriv p where " . "d.dom_id = p.dom_id and p.du_id = $uid order by dom_name"; } showVar( "sql", $sql ); //showVar( "id", $id ); $rs = pg_exec( $conn, $sql ); if( !$rs ) { return; } echo "<select name=\"$var\">\n"; if( $withnull ) { echo "<option value=\"\">all domains\n"; } while( $row = pg_fetch_array($rs) ) { if( $row["dom_id"] == $id ) { $checked = " selected"; } else { $checked = ""; } echo "<option value=\"" . $row["dom_id"] . "\"$checked>" . $row["dom_name"] . "\n"; } echo "</select>\n"; } function makeIpBase( $minip, $maxip ) { $minip = (int)$minip; $maxip = (int)$maxip; $ip1n = ($minip >> 24) & 255; $ip1x = ($maxip >> 24) & 255; $ip2n = ($minip >> 16) & 255; $ip2x = ($maxip >> 16) & 255; $ip3n = ($minip >> 8) & 255; $ip3x = ($maxip >> 8) & 255; $ip4n = $minip & 255; $ip4x = $maxip & 255; if( $ip1n != $ip1x ) { return ""; } if( $ip2n != $ip2x ) { return $ip1n . "."; } if( $ip3n != $ip3x ) { return $ip1n . "." . $ip2n . "."; } if( $ip4n != $ip4x ) { return $ip1n . "." . $ip2n . "." . $ip3n . "."; } return $ip1n . "." . $ip2n . "." . $ip3n . "." . $ip4n; } function db_iprange_list( $conn, $id, $withnull, $uid, $var, $form, $txtfield ) { if( $uid == 0 ) { $sql = "select ipr_id, ipr_min_addr, ipr_max_addr, ipr_descr " . "from iprange " . "where du_id_del is null and ipr_dhcp = false " . "order by ipr_min_addr"; } else { $sql = "select r.ipr_id, ipr_min_addr, ipr_max_addr, ipr_descr " . "from iprange r, iprangepriv p where " . "r.ipr_id = p.ipr_id and p.du_id = $uid and " . "r.du_id_del is null and r.ipr_dhcp = false " . "order by ipr_min_addr"; } $rs = pg_exec( $conn, $sql ); if( !$rs ) { return; } if( $form != "" && $txtfield != "" ) { $script = true; echo "<select name=\"$var\" onChange=\"" . $form . "_" . $var . "_chg()\">\n"; } else { $script = false; echo "<select name=\"$var\">\n"; } if( $withnull ) { echo "<option value=\"\">all ip ranges\n"; } while( $row = pg_fetch_array($rs) ) { if( $script ) { $minips[$row["ipr_id"]] = $row["ipr_min_addr"]; $maxips[$row["ipr_id"]] = $row["ipr_max_addr"]; } if( $row["ipr_id"] == $id ) { $checked = " selected"; } else { $checked = ""; } echo "<option value=\"" . $row["ipr_id"] . "\"$checked>" . intToIP($row["ipr_min_addr"]) . "-" . intToIP($row["ipr_max_addr"]) . " (" . $row["ipr_descr"] . ")\n"; } echo "</select>\n"; if( $script ) { echo "<script language=\"JavaScript\">\n"; echo "<!--\n"; echo "function " . $form . "_" . $var . "_chg()\n"; echo "{\n"; echo " val = '';\n"; echo " for(i=0;i<document." . $form . "." . $var . ".length;++i)\n"; echo " if(document." . $form . "." . $var . ".options[i].selected)\n"; echo " val = document." . $form . "." . $var . ".options[i].value;\n"; echo " switch(val)\n"; /* echo " switch(document." . $form . "." . $var . ".value )\n"; */ echo " {\n"; reset( $minips ); while( list($k,$v) = each($minips) ) { echo " case \"$k\":\n"; echo " document." . $form . "." . $txtfield . ".value = '" . makeIpBase( $v, $maxips[$k] ) . "';\n"; echo " break;\n"; } echo " default:\n"; echo " document." . $form . "." . $txtfield . ".value = '';\n"; echo " break;\n"; echo " }\n"; echo "}\n"; echo "//-->\n"; echo "</script>\n"; } } function db_check_iprange( $conn, $ipmin, $ipmax, $id ) { $sql = "select ipr_id, ipr_min_addr, ipr_max_addr, dom_id from iprange " . "where ipr_min_addr <= $ipmax and ipr_max_addr >= $ipmin " . "and ipr_id != $id"; showVar( "sql", $sql ); $rs = pg_exec( $conn, $sql ); if( !$rs ) { return false; } $row = pg_fetch_array( $rs ); if( !$row ) { return true; } echo "<b>" . intToIP($ipmin) . "-" . intToIP($ipmax) . " overlaps with iprange " . intToIP($row["ipr_min_addr"]) . "-" . intToIP($row["ipr_max_addr"]) . " ID " . $row["ipr_id"] . "</b><br />\n"; return false; } function db_check_iprange_ip( $conn, $range, $ip, $uid ) { if( $uid > 0 ) { $sql = "select count(*) as cnt, min(dom_id) as dom " . "from iprange r, iprangepriv p where " . "r.ipr_id = p.ipr_id and p.du_id = $uid and " . "r.ipr_id = $range and r.ipr_min_addr <= $ip and " . "r.ipr_max_addr >= $ip"; } else { $sql = "select count(*) as cnt, min(dom_id) as dom " . "from iprange where " . "ipr_id = $range and ipr_min_addr <= $ip and " . "ipr_max_addr >= $ip"; } showVar( "sql", $sql ); $rs = pg_exec( $conn, $sql ); if( !$rs ) { echo "<b>SQL Error in exec</b><br />\n"; return 0; } $row = pg_fetch_array( $rs ); if( !$row ) { echo "<b>SQL Error in fetch</b><br />\n"; return 0; } if( $row["cnt"] == 0 ) { echo "<b>illegal ip address for selected range</b><br />\n"; return 0; } return $row["dom"]; } function db_get_next_id( $conn, $table, $column ) { $sql = "select count(*) as cnt, max($column) as mx from $table"; $rs = pg_exec( $conn, $sql ); $id = 0; if( $rs ) { $row = pg_fetch_array( $rs ); if( $row ) { if( $row["cnt"] == 0 ) { $id = 1; } else { $id = $row["mx"] + 1; } } } if( $id == 0 ) { echo "<b>unable to get next ID from table $table</b><br />\n"; } return $id; } function db_check_description( $descr, $maxlen ) { $descr = stripslashes( $descr ); if( strlen( $descr ) > $maxlen ) { echo "<b>description too long !!!</b><br />\n"; return ""; } if( $descr != "" ) { return "'" . addslashes( $descr ) . "'"; } else { return "null"; } } function db_check_hwaddr( $conn, $hwaddr, $ipaddr ) { if( $hwaddr == "" ) { return "null"; } if( $hwaddr == "dynamic" ) { return "'dynamic'"; } $hwaddr = strtoupper( $hwaddr ); if( !ereg( "^[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]:[0-9A-F][0-9A-F]$", $hwaddr ) ) { echo "<b>illegal hardware address '$hwaddr'</b><br />\n"; return ""; } $hwaddr = "'$hwaddr'"; $sql = "select count(*) as cnt from ipaddr where " . "ip_hw_addr = $hwaddr and ip_addr != $ipaddr and " . "du_id_del is null"; $rs = pg_exec( $conn, $sql ); if( !$rs ) { echo "<b>DB ERROR: searching hardware address</b>\n"; return ""; } $row = pg_fetch_array( $rs ); if( !$row ) { echo "<b>DB ERROR: fetching hardware address</b>\n"; return ""; } if( $row["cnt"] > 0 ) { echo "<b>hardware address $hwaddr already exists</b><br />\n"; return ""; } return $hwaddr; } ?>