inc/record.inc.php
author rejo
Wed, 27 Jun 2007 20:45:51 +0000
changeset 29 e1c60f72d494
parent 21 31e17a9406eb
child 30 380197766e7e
permissions -rwxr-xr-x
[feladat @ 76] Changed some of the functions that are used for the listing of (all) zones. Instead of getting all zones from the database, it now only requests exactlty what it needs. Considerable perfomance improvement.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     1
<?
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     2
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     3
// +--------------------------------------------------------------------+
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     4
// | PowerAdmin                                                         |
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     5
// +--------------------------------------------------------------------+
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     6
// | Copyright (c) 1997-2002 The PowerAdmin Team                        |
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     7
// +--------------------------------------------------------------------+
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     8
// | This source file is subject to the license carried by the overal   |
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
     9
// | program PowerAdmin as found on http://poweradmin.sf.net            |
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    10
// | The PowerAdmin program falls under the QPL License:                |
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    11
// | http://www.trolltech.com/developer/licensing/qpl.html              |
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    12
// +--------------------------------------------------------------------+
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    13
// | Authors: Roeland Nieuwenhuis <trancer <AT> trancer <DOT> nl>       |
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    14
// |          Sjeemz <sjeemz <AT> sjeemz <DOT> nl>                      |
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    15
// +--------------------------------------------------------------------+
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    16
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    17
// Filename: record.inc.php
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    18
// Startdate: 26-10-2002
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    19
// This file is ought to edit the records in the database.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    20
// Records are domains aswell, they also belong here.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    21
// All database functions are associative.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    22
// use nextID first to get a new id. Then insert it into the database.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    23
// do not rely on auto_increment (see above).
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    24
// use dns.inc.php for validation functions.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    25
//
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    26
// $Id: record.inc.php,v 1.21 2003/05/10 20:21:01 azurazu Exp $
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    27
//
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    28
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    29
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    30
function update_soa_serial($domain_id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    31
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    32
    global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    33
	/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    34
	 * THIS CODE ISNT TESTED THROUGH MUCH YET!
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    35
	 * !!!!!!! BETACODE !!!!!!!!!!
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    36
	 * Code committed by DeViCeD, Thanks a lot!
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    37
	 * Heavily hax0red by Trancer/azurazu
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    38
	 *
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    39
	 * First we have to check, wheather current searial number 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    40
	 * was already updated on the other nameservers.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    41
	 * If field 'notified_serial' is NULL, then I guess domain is
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    42
	 * NATIVE and we don't have any secondary nameservers for this domain.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    43
	 * NOTICE: Serial number *will* be RFC1912 compilant after update 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    44
	 * NOTICE: This function will allow only 100 DNS zone transfers ;-)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    45
	 * YYYYMMDDnn
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    46
	 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    47
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    48
	$sqlq = "SELECT `notified_serial` FROM `domains` WHERE `id` = '".$domain_id."'";
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
    49
	$notified_serial = $db->queryOne($sqlq);
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    50
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    51
	$sqlq = "SELECT `content` FROM `records` WHERE `type` = 'SOA' AND `domain_id` = '".$domain_id."'";
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
    52
	$content = $db->queryOne($sqlq);
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    53
    $need_to_update = false;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    54
	
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    55
	// Getting the serial field.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    56
	$soa = explode(" ", $content);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    57
	
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    58
	if(empty($notified_serial))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    59
    {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    60
        // Ok native replication, so we have to update.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    61
        $need_to_update = true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    62
    }
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    63
    elseif($notified_serial >= $soa[2])
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    64
    {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    65
        $need_to_update = true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    66
    }
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    67
    elseif(strlen($soa[2]) != 10)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    68
    {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    69
        $need_to_update = true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    70
    }
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    71
    else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    72
    {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    73
        $need_to_update = false;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    74
    }
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    75
    if($need_to_update)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    76
    {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    77
        // Ok so we have to update it seems.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    78
        $current_serial = $soa[2];
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    79
        
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    80
		/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    81
		 * What we need here (for RFC1912) is YEAR, MONTH and DAY
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    82
		 * so let's get it ...
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    83
		 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    84
		$new_serial = date('Ymd'); // we will add revision number later
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    85
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    86
		if(strncmp($new_serial, $current_serial, 8) === 0)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    87
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    88
            /*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    89
             * Ok, so we already made updates tonight
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    90
             * let's just increase the revision number
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    91
             */				
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    92
            $revision_number = (int) substr($current_serial, -2);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    93
            if ($revision_number == 99) return false; // ok, we cannot update anymore tonight
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    94
            ++$revision_number;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    95
            // here it is ... same date, new revision
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    96
            $new_serial .= str_pad($revision_number, 2, "0", STR_PAD_LEFT);	
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    97
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    98
 		else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
    99
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   100
            /*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   101
			 * Current serial is not RFC1912 compilant, so let's make a new one
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   102
			 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   103
 			$new_serial .= '00';
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   104
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   105
        $soa[2] = $new_serial; // change serial in SOA array
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   106
		$new_soa = "";		
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   107
		// build new soa and update SQL after that
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   108
		for ($i = 0; $i < count($soa); $i++) 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   109
		{	
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   110
			$new_soa .= $soa[$i] . " "; 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   111
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   112
		$sqlq = "UPDATE `records` SET `content` = '".$new_soa."' WHERE `domain_id` = '".$domain_id."' AND `type` = 'SOA' LIMIT 1";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   113
		$db->Query($sqlq);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   114
		return true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   115
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   116
}  
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   117
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   118
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   119
 * Edit a record.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   120
 * This function validates it if correct it inserts it into the database.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   121
 * return values: true if succesful.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   122
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   123
function edit_record($recordid, $zoneid, $name, $type, $content, $ttl, $prio)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   124
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   125
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   126
  	if($content == "")
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   127
  	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   128
  		error(ERR_RECORD_EMPTY_CONTENT);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   129
  	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   130
  	// Edits the given record (validates specific stuff first)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   131
	if (!xs(recid_to_domid($recordid)))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   132
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   133
		error(ERR_RECORD_ACCESS_DENIED);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   134
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   135
	if (is_numeric($zoneid))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   136
	{
19
f9ea2a05149b [feladat @ 66]
rejo
parents: 13
diff changeset
   137
		validate_input($zoneid, $type, $content, $name, $prio, $ttl);
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   138
                $change = time();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   139
                $db->query("UPDATE records set name='$name', type='$type', content='$content', ttl='$ttl', prio='$prio', change_date='$change' WHERE id=$recordid");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   140
		
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   141
		/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   142
		 * Added by DeViCeD - Update SOA Serial number
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   143
		 * There should be more checks
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   144
		 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   145
		if ($type != 'SOA')
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   146
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   147
			update_soa_serial($zoneid);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   148
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   149
		return true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   150
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   151
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   152
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   153
		error(sprintf(ERR_INV_ARGC, "edit_record", "no zoneid given"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   154
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   155
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   156
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   157
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   158
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   159
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   160
 * Adds a record.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   161
 * This function validates it if correct it inserts it into the database.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   162
 * return values: true if succesful.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   163
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   164
function add_record($zoneid, $name, $type, $content, $ttl, $prio)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   165
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   166
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   167
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   168
	if (!xs($zoneid))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   169
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   170
		error(ERR_RECORD_ACCESS_DENIED);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   171
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   172
	if (is_numeric($zoneid))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   173
	{
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   174
		// Check the user input.
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   175
		validate_input($zoneid, $type, $content, $name, $prio, $ttl);
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   176
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   177
		// Generate new timestamp for the daemon
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   178
		$change = time();
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   179
		
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   180
		// Execute query.
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   181
		$db->query("INSERT INTO records (domain_id, name, type, content, ttl, prio, change_date) VALUES ($zoneid, '$name', '$type', '$content', $ttl, '$prio', $change)");
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   182
		if ($type != 'SOA')
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   183
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   184
			update_soa_serial($zoneid);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   185
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   186
		return true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   187
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   188
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   189
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   190
		error(sprintf(ERR_INV_ARG, "add_record"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   191
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   192
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   193
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   194
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   195
function add_supermaster($master_ip, $ns_name, $account)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   196
{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   197
        global $db;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   198
        if (!is_valid_ip($master_ip) && !is_valid_ip6($master_ip))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   199
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   200
                error(sprintf(ERR_INV_ARGC, "add_supermaster", "No or no valid ipv4 or ipv6 address given."));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   201
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   202
        if (!is_valid_hostname($ns_name))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   203
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   204
                error(ERR_DNS_HOSTNAME);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   205
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   206
	if (!validate_account($account))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   207
	{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   208
		error(sprintf(ERR_INV_ARGC, "add_supermaster", "given account name is invalid (alpha chars only)"));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   209
	}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   210
        if (supermaster_exists($master_ip))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   211
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   212
                error(sprintf(ERR_INV_ARGC, "add_supermaster", "supermaster already exists"));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   213
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   214
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   215
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   216
                $db->query("INSERT INTO supermasters VALUES ('$master_ip', '$ns_name', '$account')");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   217
                return true;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   218
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   219
}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   220
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   221
function delete_supermaster($master_ip)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   222
{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   223
        global $db;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   224
        if (!level(5))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   225
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   226
                error(ERR_LEVEL_5);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   227
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   228
        if (is_valid_ip($master_ip) || is_valid_ip6($master_ip))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   229
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   230
                $db->query("DELETE FROM supermasters WHERE ip = '$master_ip'");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   231
                return true;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   232
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   233
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   234
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   235
                error(sprintf(ERR_INV_ARGC, "delete_supermaster", "No or no valid ipv4 or ipv6 address given."));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   236
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   237
}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   238
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   239
function get_supermaster_info_from_ip($master_ip)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   240
{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   241
	global $db;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   242
        if (!level(5))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   243
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   244
                error(ERR_LEVEL_5);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   245
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   246
        if (is_valid_ip($master_ip) || is_valid_ip6($master_ip))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   247
	{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   248
	        $result = $db->queryRow("SELECT ip,nameserver,account FROM supermasters WHERE ip = '$master_ip'");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   249
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   250
		$ret = array(
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   251
		"master_ip"	=>              $result["ip"],
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   252
		"ns_name"	=>              $result["nameserver"],
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   253
		"account"	=>              $result["account"]
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   254
		);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   255
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   256
		return $ret;	
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   257
	}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   258
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   259
	{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   260
                error(sprintf(ERR_INV_ARGC, "get_supermaster_info_from_ip", "No or no valid ipv4 or ipv6 address given."));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   261
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   262
}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   263
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   264
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   265
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   266
 * Delete a record by a given id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   267
 * return values: true, this function is always succesful.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   268
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   269
function delete_record($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   270
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   271
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   272
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   273
	// Check if the user has access.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   274
	if (!xs(recid_to_domid($id)))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   275
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   276
		error(ERR_RECORD_ACCESS_DENIED);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   277
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   278
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   279
	// Retrieve the type of record to see if we can actually remove it.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   280
	$recordtype = get_recordtype_from_id($id);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   281
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   282
	// If the record type is NS and the user tries to delete it while ALLOW_NS_EDIT is set to 0
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   283
	// OR
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   284
	// check if the name of the record isnt the domain name (if so it should delete all records)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   285
	// OR
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   286
	// check if we are dealing with a SOA field (same story as NS)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   287
	if (($recordtype == "NS" && $GLOBALS["ALLOW_NS_EDIT"] != 1 && (get_name_from_record_id($id) == get_domain_name_from_id(recid_to_domid($id)))) || ($recordtype == "SOA" && $GLOBALS["ALLOW_SOA_EDIT"] != 1))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   288
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   289
		error(sprintf(ERR_RECORD_DELETE_TYPE_DENIED, $recordtype));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   290
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   291
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   292
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   293
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   294
	    $did = recid_to_domid($id);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   295
		$db->query('DELETE FROM records WHERE id=' . $id . ' LIMIT 1');
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   296
		if ($type != 'SOA')
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   297
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   298
			update_soa_serial($did);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   299
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   300
        // $id doesnt exist in database anymore so its deleted or just not there which means "true"	
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   301
		return true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   302
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   303
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   304
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   305
		error(sprintf(ERR_INV_ARG, "delete_record"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   306
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   307
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   308
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   309
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   310
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   311
 * Add a domain to the database.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   312
 * A domain is name obligatory, so is an owner.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   313
 * return values: true when succesful.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   314
 * Empty means templates dont have to be applied.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   315
 * --------------------------------------------------------------------------
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   316
 * This functions eats a template and by that it inserts various records.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   317
 * first we start checking if something in an arpa record
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   318
 * remember to request nextID's from the database to be able to insert record.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   319
 * if anything is invalid the function will error
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   320
 */
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   321
function add_domain($domain, $owner, $webip, $mailip, $empty, $type, $slave_master)
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   322
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   323
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   324
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   325
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   326
	if (!level(5))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   327
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   328
		error(ERR_LEVEL_5);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   329
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   330
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   331
	// If domain, owner and mailip are given
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   332
	// OR
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   333
	// empty is given and owner and domain
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   334
	// OR
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   335
	// the domain is an arpa record and owner is given
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   336
	// OR
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   337
	// the type is slave, domain, owner and slave_master are given
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   338
	// THAN
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   339
	// Continue this function
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   340
	if (($domain && $owner && $webip && $mailip) || ($empty && $owner && $domain) || (eregi('in-addr.arpa', $domain) && $owner) || $type=="SLAVE" && $domain && $owner && $slave_master)
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   341
	{
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   342
                // First insert zone into domain table
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   343
                $db->query("INSERT INTO domains (name, type) VALUES ('$domain', '$type')");
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   344
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   345
                // Determine id of insert zone (in other words, find domain_id)
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   346
                $iddomain = $db->lastInsertId('domains', 'id');
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   347
                if (PEAR::isError($iddomain)) {
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   348
                        die($id->getMessage());
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   349
                }
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   350
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   351
                // Second, insert into zones tables
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   352
                $db->query("INSERT INTO zones (domain_id, owner) VALUES ('$iddomain', $owner)");
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   353
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   354
		if ($type == "SLAVE")
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   355
		{
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   356
			$db->query("UPDATE domains SET master = '$slave_master' WHERE id = '$iddomain';");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   357
			
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   358
			// Done
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   359
			return true;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   360
		}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   361
		else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   362
		{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   363
			// Generate new timestamp. We need this one anyhow.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   364
			$now = time();
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   365
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   366
			if ($empty && $iddomain)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   367
			{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   368
				// If we come into this if statement we dont want to apply templates.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   369
				// Retrieve configuration settings.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   370
				$ns1 = $GLOBALS["NS1"];
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   371
				$hm  = $GLOBALS["HOSTMASTER"];
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   372
				$ttl = $GLOBALS["DEFAULT_TTL"];
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   373
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   374
				// Build and execute query
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   375
				$sql = "INSERT INTO records (domain_id, name, content, type, ttl, prio, change_date) VALUES ('$iddomain', '$domain', '$ns1 $hm 1', 'SOA', $ttl, '', '$now')";
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   376
				$db->query($sql);
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   377
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   378
				// Done
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   379
				return true;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   380
			}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   381
			elseif ($iddomain)
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   382
			{
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   383
				// If we are here we want to apply templates.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   384
				global $template;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   385
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   386
				// Iterate over the template and apply it for each field.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   387
				foreach ($template as $r)
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   388
				{
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   389
					// Same type of if statement as previous.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   390
					if ((eregi('in-addr.arpa', $domain) && ($r["type"] == "NS" || $r["type"] == "SOA")) || (!eregi('in-addr.arpa', $domain)))
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   391
					{
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   392
						// Parse the template.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   393
						$name     = parse_template_value($r["name"], $domain, $webip, $mailip);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   394
						$type     = $r["type"];
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   395
						$content  = parse_template_value($r["content"], $domain, $webip, $mailip);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   396
						$ttl      = $r["ttl"];
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   397
						$prio     = $r["prio"];
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   398
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   399
						// If no ttl is given, use the default.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   400
						if (!$ttl)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   401
						{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   402
							$ttl = $GLOBALS["DEFAULT_TTL"];
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   403
						}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   404
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   405
						$sql = "INSERT INTO records (domain_id, name, content, type, ttl, prio, change_date) VALUES ('$iddomain', '$name','$content','$type','$ttl','$prio','$now')";
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   406
						$db->query($sql);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   407
					}
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   408
				}
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   409
				// All done.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   410
				return true;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   411
			 }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   412
			 else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   413
			 {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   414
				error(sprintf(ERR_INV_ARGC, "add_domain", "could not create zone"));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   415
			 }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   416
		}
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   417
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   418
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   419
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   420
		error(sprintf(ERR_INV_ARG, "add_domain"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   421
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   422
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   423
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   424
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   425
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   426
 * Deletes a domain by a given id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   427
 * Function always succeeds. If the field is not found in the database, thats what we want anyway.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   428
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   429
function delete_domain($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   430
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   431
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   432
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   433
	if (!level(5))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   434
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   435
		error(ERR_LEVEL_5);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   436
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   437
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   438
	// See if the ID is numeric.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   439
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   440
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   441
		$db->query("DELETE FROM zones WHERE domain_id=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   442
		$db->query("DELETE FROM domains WHERE id=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   443
		$db->query("DELETE FROM records WHERE domain_id=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   444
		// Nothing in the database. If the delete deleted 0 records it means the id is just not there.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   445
		// therefore the is no need to check the affectedRows values.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   446
		return true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   447
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   448
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   449
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   450
		error(sprintf(ERR_INV_ARGC, "delete_domain", "id must be a number"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   451
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   452
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   453
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   454
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   455
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   456
 * Gets the id of the domain by a given record id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   457
 * return values: the domain id that was requested.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   458
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   459
function recid_to_domid($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   460
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   461
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   462
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   463
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   464
		$result = $db->query("SELECT domain_id FROM records WHERE id=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   465
		$r = $result->fetchRow();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   466
		return $r["domain_id"];
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   467
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   468
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   469
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   470
		error(sprintf(ERR_INV_ARGC, "recid_to_domid", "id must be a number"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   471
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   472
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   473
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   474
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   475
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   476
 * Sorts a zone by records.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   477
 * return values: the sorted zone.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   478
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   479
function sort_zone($records)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   480
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   481
	$ar_so = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   482
	$ar_ns = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   483
	$ar_mx = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   484
	$ar_mb = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   485
	$ar_ur = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   486
	$ar_ov = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   487
	foreach ($records as $c)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   488
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   489
		switch(strtoupper($c['type']))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   490
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   491
			case "SOA":
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   492
				$ar_so[] = $c;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   493
				break;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   494
			case "NS":
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   495
				$ar_ns[] = $c;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   496
				break;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   497
			case "MX":
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   498
				$ar_mx[] = $c;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   499
				break;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   500
			case "MBOXFW":
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   501
				$ar_mb[] = $c;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   502
				break;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   503
			case "URL":
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   504
				$ar_ur[] = $c;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   505
				break;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   506
			default:
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   507
				$ar_ov[] = $c;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   508
				break;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   509
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   510
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   511
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   512
	$res = array_merge($ar_so, $ar_ns, $ar_mx, $ar_mb, $ar_ur, $ar_ov);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   513
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   514
	if (count($records) == count($res))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   515
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   516
		$records = $res;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   517
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   518
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   519
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   520
		error(sprintf(ERR_INV_ARGC, "sort_zone", "records sorting failed!"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   521
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   522
	return $records;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   523
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   524
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   525
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   526
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   527
 * Change owner of a domain.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   528
 * Function should actually be in users.inc.php. But its more of a record modification than a user modification
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   529
 * return values: true when succesful.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   530
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   531
function add_owner($domain, $newowner)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   532
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   533
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   534
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   535
	if (!level(5))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   536
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   537
		error(ERR_LEVEL_5);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   538
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   539
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   540
	if (is_numeric($domain) && is_numeric($newowner) && is_valid_user($newowner))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   541
	{
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   542
		if($db->queryOne("SELECT COUNT(id) FROM zones WHERE owner=$newowner AND domain_id=$domain") == 0)
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   543
		{
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   544
			$db->query("INSERT INTO zones (domain_id, owner) VALUES($domain, $newowner)");
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   545
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   546
		return true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   547
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   548
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   549
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   550
		error(sprintf(ERR_INV_ARGC, "change_owner", "$domain / $newowner"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   551
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   552
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   553
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   554
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   555
function delete_owner($domain, $owner)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   556
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   557
	global $db;
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   558
	if($db->queryOne("SELECT COUNT(id) FROM zones WHERE owner=$owner AND domain_id=$domain") != 0)
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   559
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   560
		$db->query("DELETE FROM zones WHERE owner=$owner AND domain_id=$domain");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   561
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   562
	return true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   563
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   564
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   565
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   566
 * Retrieves all supported dns record types
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   567
 * This function might be deprecated.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   568
 * return values: array of types in string form.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   569
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   570
function get_record_types()
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   571
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   572
	global $rtypes;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   573
	return $rtypes;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   574
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   575
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   576
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   577
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   578
 * Retrieve all records by a given type and domain id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   579
 * Example: get all records that are of type A from domain id 1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   580
 * return values: a DB class result object
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   581
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   582
function get_records_by_type_from_domid($type, $recid)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   583
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   584
	global $rtypes;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   585
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   586
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   587
	// Does this type exist?
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   588
	if(!in_array(strtoupper($type), $rtypes))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   589
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   590
		error(sprintf(ERR_INV_ARGC, "get_records_from_type", "this is not a supported record"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   591
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   592
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   593
	// Get the domain id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   594
	$domid = recid_to_domid($recid);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   595
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   596
	$result = $db->query("select id, type from records where domain_id=$recid and type='$type'");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   597
	return $result;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   598
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   599
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   600
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   601
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   602
 * Retrieves the type of a record from a given id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   603
 * return values: the type of the record (one of the records types in $rtypes assumable).
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   604
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   605
function get_recordtype_from_id($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   606
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   607
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   608
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   609
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   610
		$result = $db->query("SELECT type FROM records WHERE id=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   611
		$r = $result->fetchRow();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   612
		return $r["type"];
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   613
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   614
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   615
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   616
		error(sprintf(ERR_INV_ARG, "get_recordtype_from_id"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   617
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   618
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   619
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   620
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   621
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   622
 * Retrieves the name (e.g. bla.test.com) of a record by a given id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   623
 * return values: the name associated with the id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   624
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   625
function get_name_from_record_id($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   626
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   627
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   628
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   629
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   630
		$result = $db->query("SELECT name FROM records WHERE id=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   631
		$r = $result->fetchRow();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   632
		return $r["name"];
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   633
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   634
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   635
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   636
		error(sprintf(ERR_INV_ARG, "get_name_from_record_id"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   637
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   638
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   639
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   640
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   641
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   642
 * Get all the domains from a database of which the user is the owner.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   643
 * return values: an array with the id of the domain and its name.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   644
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   645
function get_domains_from_userid($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   646
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   647
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   648
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   649
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   650
		$result = $db->query("SELECT domains.id AS domain_id, domains.name AS name FROM domains LEFT JOIN zones ON domains.id=zones.domain_id WHERE owner=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   651
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   652
		$ret = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   653
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   654
		// Put all the information in a big array.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   655
		while ($r = $result->fetchRow())
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   656
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   657
			$ret[] = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   658
			"id"            =>              $r["domain_id"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   659
			"name"          =>              $r["name"]
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   660
			);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   661
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   662
		return $ret;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   663
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   664
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   665
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   666
		error(sprintf(ERR_INV_ARGC, "get_domains_from_userid", "This is not a valid userid: $id"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   667
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   668
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   669
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   670
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   671
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   672
 * Get domain name from a given id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   673
 * return values: the name of the domain associated with the id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   674
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   675
function get_domain_name_from_id($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   676
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   677
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   678
	if (!xs($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   679
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   680
		error(ERR_RECORD_ACCESS_DENIED);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   681
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   682
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   683
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   684
		$result = $db->query("SELECT name FROM domains WHERE id=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   685
		if ($result->numRows() == 1)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   686
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   687
 			$r = $result->fetchRow();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   688
 			return $r["name"];
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   689
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   690
		else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   691
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   692
	 		error(sprintf(ERR_INV_ARGC, "get_domain_name_from_id", "more than one domain found?! whaaa! BAD! BAD! Contact admin!"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   693
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   694
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   695
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   696
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   697
		error(sprintf(ERR_INV_ARGC, "get_domain_name_from_id", "Not a valid domainid: $id"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   698
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   699
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   700
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   701
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   702
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   703
 * Get information about a domain name from a given domain id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   704
 * the function looks up the domainname, the owner of the domain and the number of records in it.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   705
 * return values: an array containing the information.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   706
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   707
function get_domain_info_from_id($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   708
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   709
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   710
	if (!xs($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   711
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   712
		error(ERR_RECORD_ACCESS_DENIED);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   713
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   714
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   715
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   716
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   717
	if ($_SESSION[$id."_ispartial"] == 1) {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   718
	
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   719
	$sqlq = "SELECT 
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   720
	domains.type AS type,
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   721
	domains.name AS name,
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   722
	users.fullname AS owner,
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   723
	count(record_owners.id) AS aantal
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   724
	FROM domains, users, record_owners, records
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   725
	
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   726
        WHERE record_owners.user_id = ".$_SESSION["userid"]."
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   727
        AND record_owners.record_id = records.id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   728
	AND records.domain_id = ".$id."
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   729
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   730
	GROUP BY name, owner, users.fullname
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   731
	ORDER BY name";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   732
	
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   733
	$result = $db->queryRow($sqlq);
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   734
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   735
	$ret = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   736
	"name"          =>              $result["name"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   737
	"ownerid"       =>              $_SESSION["userid"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   738
	"owner"         =>              $result["owner"],
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   739
	"type"		=>		$result["type"],
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   740
	"numrec"        =>              $result["aantal"]
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   741
	);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   742
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   743
	return $ret;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   744
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   745
	} else{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   746
	
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   747
		// Query that retrieves the information we need.
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   748
		$sqlq = "SELECT 
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   749
			domains.type AS type,
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   750
			domains.name AS name,
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   751
			min(zones.owner) AS ownerid,
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   752
			users.fullname AS owner,
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   753
			count(records.domain_id) AS aantal
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   754
			FROM domains
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   755
			LEFT JOIN records ON domains.id=records.domain_id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   756
			LEFT JOIN zones ON domains.id=zones.domain_id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   757
			LEFT JOIN users ON zones.owner=users.id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   758
			WHERE domains.id=$id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   759
			GROUP BY name, owner, users.fullname
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   760
			ORDER BY zones.id";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   761
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   762
		// Put the first occurence in an array and return it.
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   763
		$result = $db->queryRow($sqlq);
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   764
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   765
		//$result["ownerid"] = ($result["ownerid"] == NULL) ? $db->queryOne("select min(id) from users where users.level=10") : $result["ownerid"];
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   766
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   767
		$ret = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   768
		"name"          =>              $result["name"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   769
		"ownerid"       =>              $result["ownerid"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   770
		"owner"         =>              $result["owner"],
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   771
		"type"          =>              $result["type"],
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   772
		"numrec"        =>              $result["aantal"]
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   773
		);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   774
		return $ret;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   775
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   776
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   777
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   778
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   779
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   780
		error(sprintf(ERR_INV_ARGC, "get_domain_num_records_from_id", "This is not a valid domainid: $id"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   781
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   782
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   783
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   784
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   785
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   786
 * Check if a domain is already existing.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   787
 * return values: true if existing, false if it doesnt exist.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   788
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   789
function domain_exists($domain)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   790
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   791
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   792
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   793
	if (!level(5))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   794
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   795
		error(ERR_LEVEL_5);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   796
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   797
	if (is_valid_domain($domain))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   798
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   799
		$result = $db->query("SELECT id FROM domains WHERE name='$domain'");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   800
		if ($result->numRows() == 0)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   801
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   802
			return false;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   803
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   804
		elseif ($result->numRows() >= 1)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   805
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   806
			return true;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   807
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   808
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   809
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   810
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   811
		error(ERR_DOMAIN_INVALID);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   812
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   813
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   814
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   815
function get_supermasters()
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   816
{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   817
        global $db;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   818
        $result = $db->query("SELECT ip, nameserver, account FROM supermasters");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   819
        $ret = array();
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   820
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   821
        if($result->numRows() == 0)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   822
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   823
                return -1;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   824
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   825
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   826
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   827
                while ($r = $result->fetchRow())
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   828
                {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   829
                        $ret[] = array(
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   830
                        "master_ip"     => $r["ip"],
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   831
                        "ns_name"       => $r["nameserver"],
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   832
                        "account"       => $r["account"],
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   833
                        );
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   834
                        return $ret;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   835
                }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   836
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   837
}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   838
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   839
function supermaster_exists($master_ip)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   840
{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   841
        global $db;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   842
        if (!level(5))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   843
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   844
                error(ERR_LEVEL_5);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   845
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   846
        if (is_valid_ip($master_ip) || is_valid_ip6($master_ip))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   847
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   848
                $result = $db->query("SELECT ip FROM supermasters WHERE ip = '$master_ip'");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   849
                if ($result->numRows() == 0)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   850
                {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   851
                        return false;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   852
                }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   853
                elseif ($result->numRows() >= 1)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   854
                {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   855
                        return true;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   856
                }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   857
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   858
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   859
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   860
                error(sprintf(ERR_INV_ARGC, "supermaster_exists", "No or no valid IPv4 or IPv6 address given."));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   861
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   862
}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   863
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   864
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   865
/*
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
   866
 * Get all domains from the database 
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   867
 * This function gets all the domains from the database unless a user id is below 5.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   868
 * if a user id is below 5 this function will only retrieve records for that user.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   869
 * return values: the array of domains or -1 if nothing is found.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   870
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   871
function get_domains($userid=true,$letterstart=all,$rowstart=0,$rowamount=999999)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   872
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   873
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   874
	if((!level(5) || !$userid) && !level(10) && !level(5))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   875
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   876
		$add = " AND zones.owner=".$_SESSION["userid"];
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   877
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   878
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   879
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   880
		$add = "";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   881
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   882
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   883
	$sqlq = "SELECT domains.id AS domain_id,
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   884
	min(zones.owner) AS owner,
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   885
	count(DISTINCT records.id) AS aantal,
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   886
	domains.name AS domainname
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   887
	FROM domains
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   888
	LEFT JOIN zones ON domains.id=zones.domain_id 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   889
	LEFT JOIN records ON records.domain_id=domains.id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   890
	WHERE 1 $add ";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   891
	if ($letterstart!=all && $letterstart!=1) {
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   892
	   $sqlq.=" AND substring(domains.name,1,1) REGEXP '^".$letterstart."' ";
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   893
	} elseif ($letterstart==1) {
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   894
	   $sqlq.=" AND substring(domains.name,1,1) REGEXP '^[[:digit:]]'";
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   895
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   896
	$sqlq.=" GROUP BY domainname, domain_id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   897
	ORDER BY domainname
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   898
	LIMIT $rowstart,$rowamount";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   899
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   900
	$result = $db->query($sqlq);
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   901
	$result2 = $db->query($sqlq); 
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   902
	
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   903
	$numrows = $result2->numRows();
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   904
	$i=1;
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   905
	if ($numrows > 0) {
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   906
		$andnot=" AND NOT domains.id IN (";
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   907
		while($r = $result2->fetchRow()) {
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   908
			$andnot.=$r["domain_id"];
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   909
			if ($i < $numrows) {
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   910
				$andnot.=",";
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   911
				$i++;
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   912
			}
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   913
		}
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   914
		$andnot.=")";
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   915
	}
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   916
	else
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   917
	{
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   918
		$andnot="";
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   919
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   920
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   921
	if ($letterstart!=all && $letterstart!=1) {
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   922
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   923
		$sqlq = "SELECT domains.id AS domain_id,
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   924
		count(DISTINCT record_owners.record_id) AS aantal,
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   925
		domains.name AS domainname
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   926
		FROM domains, record_owners,records, zones
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   927
		WHERE record_owners.user_id = '".$_SESSION["userid"]."'
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   928
		AND (records.id = record_owners.record_id
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   929
		AND domains.id = records.domain_id)
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   930
		$andnot 
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   931
		AND domains.name LIKE '".$letterstart."%' 
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   932
		AND (zones.domain_id != records.domain_id AND zones.owner!='".$_SESSION["userid"]."')
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   933
		GROUP BY domainname, domain_id
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   934
		ORDER BY domainname";
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   935
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   936
		$result_extra = $db->query($sqlq);
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   937
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   938
	} else {
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   939
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   940
		$sqlq = "SELECT domains.id AS domain_id,
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   941
		count(DISTINCT record_owners.record_id) AS aantal,
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   942
		domains.name AS domainname
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   943
		FROM domains, record_owners,records, zones
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   944
		WHERE record_owners.user_id = '".$_SESSION["userid"]."'
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   945
		AND (records.id = record_owners.record_id
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   946
		AND domains.id = records.domain_id)
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   947
		$andnot 
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   948
		AND substring(domains.name,1,1) REGEXP '^[[:digit:]]'
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   949
		AND (zones.domain_id != records.domain_id AND zones.owner!='".$_SESSION["userid"]."')
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   950
		GROUP BY domainname, domain_id
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   951
		ORDER BY domainname";
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   952
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   953
		$result_extra[$i] = $db->query($sqlq);
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   954
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   955
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   956
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   957
	while($r = $result->fetchRow())
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   958
	{
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
   959
		$r["owner"] = ($r["owner"] == NULL) ? $db->queryOne("select min(id) from users where users.level=10") : $r["owner"];
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   960
	     	$ret[$r["domainname"]] = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   961
		"name"          =>              $r["domainname"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   962
		"id"            =>              $r["domain_id"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   963
		"owner"         =>              $r["owner"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   964
		"numrec"        =>              $r["aantal"]
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   965
		);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   966
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   967
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   968
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   969
	if ($letterstart!=all && $letterstart!=1) {
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   970
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   971
		while($r = $result_extra->fetchRow())
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   972
		{
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   973
		       $ret[$r["domainname"]] = array(
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   974
		       "name"          =>              $r["domainname"]."*",
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   975
		       "id"            =>              $r["domain_id"],
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   976
		       "owner"         =>              $_SESSION["userid"],
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   977
		       "numrec"        =>              $r["aantal"]
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   978
		       );
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   979
		       $_SESSION["partial_".$r["domainname"]] = 1;
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   980
		}
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   981
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   982
	} else {
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   983
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   984
		foreach ($result_extra as $result_e) {
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   985
		while($r = $result_e->fetchRow())
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   986
		{
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   987
		       $ret[$r["domainname"]] = array(
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   988
		       "name"          =>              $r["domainname"]."*",
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   989
		       "id"            =>              $r["domain_id"],
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   990
		       "owner"         =>              $_SESSION["userid"],
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   991
		       "numrec"        =>              $r["aantal"]
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   992
		       );
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   993
		       $_SESSION["partial_".$r["domainname"]] = 1;
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   994
		}
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   995
		}
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   996
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   997
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
   998
21
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
   999
	if (empty($ret)) {
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
  1000
	   return -1;
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
  1001
	} else {
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
  1002
	   sort($ret);
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
  1003
	   return $ret;
31e17a9406eb [feladat @ 68]
rejo
parents: 19
diff changeset
  1004
	}
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1005
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1006
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1007
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1008
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1009
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1010
 * Get a record from an id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1011
 * Retrieve all fields of the record and send it back to the function caller.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1012
 * return values: the array with information, or -1 is nothing is found.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1013
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1014
function get_record_from_id($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1015
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1016
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1017
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1018
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1019
		$result = $db->query("SELECT id, domain_id, name, type, content, ttl, prio, change_date FROM records WHERE id=$id");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1020
		if($result->numRows() == 0)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1021
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1022
			return -1;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1023
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1024
		elseif ($result->numRows() == 1)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1025
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1026
			$r = $result->fetchRow();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1027
			$ret = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1028
			"id"            =>      $r["id"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1029
			"domain_id"     =>      $r["domain_id"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1030
			"name"          =>      $r["name"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1031
			"type"          =>      $r["type"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1032
			"content"       =>      $r["content"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1033
			"ttl"           =>      $r["ttl"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1034
			"prio"          =>      $r["prio"],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1035
			"change_date"   =>      $r["change_date"]
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1036
			);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1037
			return $ret;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1038
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1039
		else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1040
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1041
			error(sprintf(ERR_INV_ARGC, "get_record_from_id", "More than one row returned! This is bad!"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1042
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1043
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1044
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1045
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1046
		error(sprintf(ERR_INV_ARG, "get_record_from_id"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1047
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1048
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1049
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1050
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1051
/*
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1052
 * Get all records from a domain id.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1053
 * Retrieve all fields of the records and send it back to the function caller.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1054
 * return values: the array with information, or -1 is nothing is found.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1055
 */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1056
function get_records_from_domain_id($id,$rowstart=0,$rowamount=999999)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1057
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1058
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1059
	if (is_numeric($id))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1060
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1061
		if ($_SESSION[$id."_ispartial"] == 1) {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1062
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1063
		$result = $db->query("SELECT record_owners.record_id as id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1064
		FROM record_owners,domains,records
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1065
		WHERE record_owners.user_id = ".$_SESSION["userid"]."
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1066
		AND record_owners.record_id = records.id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1067
		AND records.domain_id = ".$id."
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1068
		GROUP bY record_owners.record_id
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1069
		LIMIT $rowstart,$rowamount");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1070
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1071
		$ret = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1072
		if($result->numRows() == 0)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1073
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1074
		return -1;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1075
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1076
		else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1077
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1078
		$ret[] = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1079
		$retcount = 0;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1080
		while($r = $result->fetchRow())
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1081
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1082
		// Call get_record_from_id for each row.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1083
		$ret[$retcount] = get_record_from_id($r["id"]);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1084
		$retcount++;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1085
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1086
		return $ret;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1087
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1088
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1089
		} else {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1090
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1091
		$result = $db->query("SELECT id FROM records WHERE domain_id=$id LIMIT $rowstart,$rowamount");
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1092
		$ret = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1093
		if($result->numRows() == 0)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1094
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1095
			return -1;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1096
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1097
		else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1098
		{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1099
			$ret[] = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1100
			$retcount = 0;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1101
			while($r = $result->fetchRow())
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1102
			{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1103
				// Call get_record_from_id for each row.
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1104
				$ret[$retcount] = get_record_from_id($r["id"]);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1105
				$retcount++;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1106
			}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1107
			return $ret;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1108
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1109
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1110
		}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1111
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1112
	else
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1113
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1114
		error(sprintf(ERR_INV_ARG, "get_records_from_domain_id"));
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1115
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1116
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1117
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1118
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1119
function get_users_from_domain_id($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1120
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1121
	global $db;
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
  1122
	$result = $db->queryCol("SELECT owner FROM zones WHERE domain_id=$id");
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1123
	$ret = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1124
	foreach($result as $uid)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1125
	{
8
47dd15d8bb8c [feladat @ 20]
rejo
parents: 5
diff changeset
  1126
		$fullname = $db->queryOne("SELECT fullname FROM users WHERE id=$uid");
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1127
		$ret[] = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1128
		"id" 		=> 	$uid,
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1129
		"fullname"	=>	$fullname		
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1130
		);		
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1131
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1132
	return $ret;	
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1133
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1134
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1135
function search_record($question)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1136
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1137
	global $db;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1138
	$question = trim($question);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1139
	if (empty($question)) 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1140
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1141
		$S_INPUT_TYPE = -1;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1142
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1143
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1144
	/* now for some input-type searching */
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1145
	if (is_valid_ip($question) || is_valid_ip6($question))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1146
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1147
		$S_INPUT_TYPE = 0;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1148
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1149
	elseif(is_valid_domain($question) || 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1150
		is_valid_hostname($question) ||
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1151
		is_valid_mboxfw($question)) // I guess this one can appear in records table too (content?!)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1152
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1153
		$S_INPUT_TYPE = 1;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1154
	}	  
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1155
	else 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1156
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1157
		$S_INPUT_TYPE = -1;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1158
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1159
	switch($S_INPUT_TYPE)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1160
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1161
		case '0': 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1162
			$sqlq = "SELECT * FROM `records` WHERE `content` = '".$question."' ORDER BY `type` DESC";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1163
			$result = $db->query($sqlq);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1164
			$ret_r = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1165
			while ($r = $result->fetchRow())
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1166
			{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1167
			    if(xs($r['domain_id']))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1168
			    {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1169
    				$ret_r[] = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1170
    				  'id'			=>	$r['id'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1171
    				  'domain_id'		=>	$r['domain_id'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1172
    				  'name'		=>	$r['name'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1173
    				  'type'		=>	$r['type'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1174
    				  'content'		=>	$r['content'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1175
    				  'ttl'			=>	$r['ttl'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1176
    				  'prio'		=>	$r['prio'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1177
    				  'change_date'		=>	$r['change_date']
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1178
    				);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1179
				}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1180
			}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1181
			break;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1182
	    
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1183
		case '1' :
5
ebf8868e99f5 [feladat @ 6]
rejo
parents: 1
diff changeset
  1184
			$sqlq = "SELECT `domains`.*, count(`records`.`id`) AS `numrec`, `zones`.`owner`, `records`.`domain_id`
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1185
					FROM `domains`, `records`, `zones`  
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1186
					WHERE `domains`.`id` = `records`.`domain_id` 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1187
					AND `zones`.`domain_id` = `domains`.`id` 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1188
					AND `domains`.`name` = '".$question."' 
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1189
					GROUP BY (`domains`.`id`)";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1190
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1191
			$result = $db->query($sqlq);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1192
			$ret_d = array();
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1193
			while ($r = $result->fetchRow())
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1194
			{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1195
			    if(xs($r['domain_id']))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1196
			    {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1197
				    $ret_d[] = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1198
    					'id'			=>	$r['id'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1199
    					'name'		=>	$r['name'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1200
    					'numrec'		=>	$r['numrec'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1201
    					'owner'		=>	$r['owner']
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1202
    				);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1203
				}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1204
			}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1205
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1206
			$sqlq = "SELECT * FROM `records` WHERE `name` = '".$question."' OR `content` = '".$question."' ORDER BY `type` DESC";
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1207
			$result = $db->query($sqlq);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1208
			while ($r = $result->fetchRow())
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1209
			{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1210
			    if(xs($r['domain_id']))
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1211
			    {
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1212
    				$ret_r[] = array(
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1213
    					'id'			=>	$r['id'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1214
    					'domain_id'		=>	$r['domain_id'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1215
    					'name'		=>	$r['name'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1216
    					'type'		=>	$r['type'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1217
    					'content'		=>	$r['content'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1218
    					'ttl'			=>	$r['ttl'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1219
    					'prio'		=>	$r['prio'],
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1220
    				);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1221
    			}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1222
			}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1223
			break;
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1224
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1225
	if($S_INPUT_TYPE == 1)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1226
	{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1227
		return array('domains' => $ret_d, 'records' => $ret_r);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1228
	}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1229
	return array('records' => $ret_r);
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1230
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1231
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1232
function get_domain_type($id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1233
{
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1234
	global $db;
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1235
        if (is_numeric($id))
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1236
	{
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1237
		$type = $db->queryOne("SELECT `type` FROM `domains` WHERE `id` = '".$id."'");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1238
		if($type == "")
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1239
		{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1240
			$type = "NATIVE";
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1241
		}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1242
		return $type;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1243
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1244
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1245
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1246
                error(sprintf(ERR_INV_ARG, "get_record_from_id", "no or no valid zoneid given"));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1247
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1248
}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1249
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1250
function get_domain_slave_master($id)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1251
{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1252
	global $db;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1253
        if (is_numeric($id))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1254
	{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1255
		$slave_master = $db->queryOne("SELECT `master` FROM `domains` WHERE `type` = 'SLAVE' and `id` = '".$id."'");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1256
		return $slave_master;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1257
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1258
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1259
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1260
                error(sprintf(ERR_INV_ARG, "get_domain_slave_master", "no or no valid zoneid given"));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1261
        }
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1262
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1263
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1264
function change_domain_type($type, $id)
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1265
{
13
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1266
	global $db;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1267
	unset($add);
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1268
        if (is_numeric($id))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1269
	{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1270
		// It is not really neccesary to clear the master field if a 
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1271
		// zone is not of the type "slave" as powerdns will ignore that
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1272
		// fiedl, but it is cleaner anyway.
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1273
		if ($type != "SLAVE")
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1274
		{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1275
			$add = ", master=''";
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1276
		}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1277
		$result = $db->query("UPDATE `domains` SET `type` = '" .$type. "'".$add." WHERE `id` = '".$id."'");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1278
	}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1279
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1280
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1281
                error(sprintf(ERR_INV_ARG, "change_domain_type", "no or no valid zoneid given"));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1282
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1283
}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1284
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1285
function change_domain_slave_master($id, $slave_master)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1286
{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1287
	global $db;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1288
        if (is_numeric($id))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1289
	{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1290
       		if (is_valid_ip($slave_master) || is_valid_ip6($slave_master))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1291
		{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1292
			$result = $db->query("UPDATE `domains` SET `master` = '" .$slave_master. "' WHERE `id` = '".$id."'");
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1293
		}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1294
		else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1295
		{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1296
			error(sprintf(ERR_INV_ARGC, "change_domain_slave_master", "This is not a valid IPv4 or IPv6 address: $slave_master"));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1297
		}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1298
	}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1299
        else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1300
        {
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1301
                error(sprintf(ERR_INV_ARG, "change_domain_type", "no or no valid zoneid given"));
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1302
        }
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1303
}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1304
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1305
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1306
function validate_account($account)
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1307
{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1308
	
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1309
  	if(preg_match("/^[A-Z0-9._-]+$/i",$account))
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1310
	{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1311
		return true;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1312
	}
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1313
	else
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1314
	{
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1315
		return false;
2ff220cfde13 [feladat @ 60]
rejo
parents: 8
diff changeset
  1316
	}
1
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1317
}
58094faf794d [feladat @ 2]
rejo
parents:
diff changeset
  1318
?>