function get_user_dn($ds, $user, $config)
{
    if ($ds) {
        $attrs = array('dn');
        if ($config[ldap_userdn] == '') {
            if ($config[ldap_filter] != '') {
                $filter = xlat($config[ldap_filter], $login, $config);
            } else {
                $filter = 'uid=' . $login;
            }
        } else {
            $filter = xlat($config[ldap_userdn], $login, $config);
        }
        if ($config[ldap_debug] == 'true') {
            if ($config[ldap_userdn] == '') {
                print "<b>DEBUG(LDAP): Search Query: BASE='{$config['ldap_base']}',FILTER='{$filter}'</b><br>\n";
            } else {
                print "<b>DEBUG(LDAP): Search Query: BASE='{$filter}',FILTER='(objectclass=radiusprofile)'</b><br>\n";
            }
        }
        if ($config[ldap_userdn] == '') {
            $sr = @ldap_search($ds, "{$config['ldap_base']}", $filter, $attrs);
        } else {
            $sr = @ldap_read($ds, $filter, '(objectclass=radiusprofile)', $attrs);
        }
        $entry = ldap_first_entry($ds, $sr);
        if ($entry) {
            $dn = ldap_get_dn($ds, $entry);
        }
        return $dn;
    }
}
        if (preg_match('/^[[:space:]]*#/', $val) || preg_match('/^[[:space:]]*$/', $val)) {
            continue;
        }
        list($key, $v) = preg_split("/\t+/", $val);
        $show_attrs["{$key}"] = $v != '' ? "{$v}" : "{$key}";
    }
    if ($config[general_use_session] == 'yes') {
        session_register('show_attrs');
    }
}
unset($acct_attrs);
if (isset($_SESSION['acct_attrs'])) {
    $acct_attrs = $_SESSION['acct_attrs'];
}
if (!isset($acct_attrs) && isset($config[general_accounting_attrs_file])) {
    $infile = xlat($config[general_accounting_attrs_file], $login, $config);
    $ARR = file($infile);
    foreach ($ARR as $val) {
        $val = chop($val);
        if (preg_match('/^[[:space:]]*#/', $val) || preg_match('/^[[:space:]]*$/', $val)) {
            continue;
        }
        list($num, $desc, $showua, $showuf, $showfl) = preg_split("/\t+/", $val);
        if ($showua == 'yes') {
            $acct_attrs["ua"]["num"]++;
            $acct_attrs["ua"]["{$num}"] = $desc;
        }
        if ($showuf == 'yes') {
            $acct_attrs["uf"]["num"]++;
            $acct_attrs["uf"]["{$num}"] = $desc;
        }
unset($item_vals);
if ($config[general_decode_normal_attributes] == 'yes') {
    $decode_normal = 1;
}
$ds = @ldap_connect("{$config['ldap_server']}");
// must be a valid ldap server!
if ($ds) {
    $r = @da_ldap_bind($ds, $config);
    if ($config[ldap_userdn] == '') {
        if ($config[ldap_filter] != '') {
            $filter = xlat($config[ldap_filter], $login, $config);
        } else {
            $filter = 'uid=' . $login;
        }
    } else {
        $filter = xlat($config[ldap_userdn], $login, $config);
    }
    if ($config[ldap_debug] == 'true') {
        if ($config[ldap_userdn] == '') {
            print "<b>DEBUG(LDAP): Search Query: BASE='{$config['ldap_base']}',FILTER='{$filter}'</b><br>\n";
        } else {
            print "<b>DEBUG(LDAP): Search Query: BASE='{$filter}',FILTER='(objectclass=radiusprofile)'</b><br>\n";
        }
    }
    if ($config[ldap_userdn] == '') {
        $sr = @ldap_search($ds, "{$config['ldap_base']}", $filter);
    } else {
        $sr = @ldap_read($ds, $filter, '(objectclass=radiusprofile)');
    }
    $info = @ldap_get_entries($ds, $sr);
    $dn = $info[0]['dn'];
if (is_file("../lib/sql/drivers/{$config['sql_type']}/functions.php")) {
    include_once "../lib/sql/drivers/{$config['sql_type']}/functions.php";
} else {
    echo <<<EOM
<body>
<center>
<b>Could not include SQL library functions. Aborting</b>
</body>
</html>
EOM;
    exit;
}
$date = strftime('%A, %e %B %Y, %T %Z');
$sql_extra_query = '';
if ($config[sql_accounting_extra_query] != '') {
    $sql_extra_query = xlat($config[sql_accounting_extra_query], $login, $config);
    $sql_extra_query = da_sql_escape_string($sql_extra_query);
}
$link = @da_sql_pconnect($config);
$link2 = connect2db($config);
$tot_in = $tot_rem = 0;
if ($link) {
    $h = 21;
    $servers_num = 0;
    if ($config[general_ld_library_path] != '') {
        putenv("LD_LIBRARY_PATH={$config['general_ld_library_path']}");
    }
    foreach ($nas_list as $nas) {
        $j = 0;
        $num = 0;
        if ($server != '') {
                 if ($attrmap[generic]["{$key}"] == 'generic') {
                     for ($i = 0; $i < $info[0]["{$val}"][count]; $i++) {
                         $default_vals["{$key}"][] = $info[0]["{$val}"][$i];
                     }
                     $default_vals["{$key}"][count] += $info[0]["{$val}"][count];
                 } else {
                     $default_vals["{$key}"] = $info[0]["{$val}"];
                 }
             }
         }
     }
 }
 if ($regular_profile_attr != '') {
     $get_attrs = array("{$regular_profile_attr}");
     if ($config[ldap_filter] != '') {
         $filter = xlat($config[ldap_filter], $login, $config);
     } else {
         $filter = 'uid=' . $login;
     }
     if ($config[ldap_debug] == 'true') {
         print "<b>DEBUG(LDAP): Search Query: BASE='{$config['ldap_base']}',FILTER='{$filter}'</b><br>\n";
     }
     $sr = @ldap_search($ds, "{$config['ldap_base']}", $filter, $get_attrs);
     if ($info = @ldap_get_entries($ds, $sr)) {
         for ($i = 0; $i < $info[0][$regular_profile_attr]["count"]; $i++) {
             $dn2 = $info[0][$regular_profile_attr][$i];
             if ($dn2 != '') {
                 if ($config[ldap_debug] == 'true') {
                     print "<b>DEBUG(LDAP): Search Query: BASE='{$dn2}',FILTER='objectclass=*'</b><br>\n";
                 }
                 $sr2 = @ldap_search($ds, "{$dn2}", 'objectclass=*');