PK!?nssnu[# /etc/default/nss # This file can theoretically contain a bunch of customization variables # for Name Service Switch in the GNU C library. For now there are only # four variables: # # NETID_AUTHORITATIVE # If set to TRUE, the initgroups() function will accept the information # from the netid.byname NIS map as authoritative. This can speed up the # function significantly if the group.byname map is large. The content # of the netid.byname map is used AS IS. The system administrator has # to make sure it is correctly generated. #NETID_AUTHORITATIVE=TRUE # # SERVICES_AUTHORITATIVE # If set to TRUE, the getservbyname{,_r}() function will assume # services.byservicename NIS map exists and is authoritative, particularly # that it contains both keys with /proto and without /proto for both # primary service names and service aliases. The system administrator # has to make sure it is correctly generated. #SERVICES_AUTHORITATIVE=TRUE # # SETENT_BATCH_READ # If set to TRUE, various setXXent() functions will read the entire # database at once and then hand out the requests one by one from # memory with every getXXent() call. Otherwise each getXXent() call # might result into a network communication with the server to get # the next entry. SETENT_BATCH_READ=TRUE # # ADJUNCT_AS_SHADOW # If set to TRUE, the passwd routines in the NIS NSS module will not # use the passwd.adjunct.byname tables to fill in the password data # in the passwd structure. This is a security problem if the NIS # server cannot be trusted to send the passwd.adjuct table only to # privileged clients. Instead the passwd.adjunct.byname table is # used to synthesize the shadow.byname table if it does not exist. #ADJUNCT_AS_SHADOW=TRUE PK!DB!!grubnu[GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL="serial console" GRUB_SERIAL_COMMAND="serial --speed=115200" GRUB_CMDLINE_LINUX="crashkernel=auto console=ttyS0,115200" GRUB_DISABLE_RECOVERY="true" PK!X_Gwwuseraddnu[# useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes PK!J~ accept_localnu[0 PK!SQgaccept_redirectsnu[1 PK!J~accept_source_routenu[0 PK!J~ arp_acceptnu[0 PK!J~ arp_announcenu[0 PK!J~ arp_filternu[0 PK!J~ arp_ignorenu[0 PK!J~ arp_notifynu[0 PK!J~ bootp_relaynu[0 PK!J~disable_policynu[0 PK!J~ disable_xfrmnu[0 PK!J~force_igmp_versionnu[0 PK!J~ forwardingnu[0 PK!4"igmpv2_unsolicited_report_intervalnu[10000 PK!"igmpv3_unsolicited_report_intervalnu[1000 PK!J~ log_martiansnu[0 PK!J~ mc_forwardingnu6$0 PK!J~ medium_idnu[0 PK!SQgpromote_secondariesnu[1 PK!J~ proxy_arpnu[0 PK!J~proxy_arp_pvlannu[0 PK!J~route_localnetnu[0 PK!SQg rp_filternu[1 PK!SQgsecure_redirectsnu[1 PK!SQgsend_redirectsnu[1 PK!SQg shared_medianu[1 PK!J~src_valid_marknu[0 PK!J~tagnu[0 PK!z+r anycast_delaynu[100 PK!J~ app_solicitnu[0 PK!6]base_reachable_timenu[30 PK!ybase_reachable_time_msnu[30000 PK!W9=delay_first_probe_timenu[5 PK!6] gc_intervalnu[30 PK!ݟ4 gc_stale_timenu[60 PK!$v gc_thresh1nu[128 PK!G gc_thresh2nu[512 PK!X gc_thresh3nu[1024 PK!J~locktimenu[0 PK!ўgU mcast_solicitnu[3 PK!ײ proxy_delaynu[80 PK!ZX proxy_qlennu[64 PK! retrans_timenu[1000 PK!retrans_time_msnu[1000 PK!ўgU ucast_solicitnu[3 PK!wl unres_qlennu[31 PK!Y1unres_qlen_bytesnu[65536 PK!`rѐ usercp.incnu[ You have ('.$c.') unread '.convertPlural($c, array('private message','private messages')).'' : '
  • Private Messaging
  • '; } else { $ucp_private_msg = ''; } ?>PK!= Gwwallowed_user_lnk.incnu[ $v) { if (($v && (strpos($addr, $k) !== false)) || (!$v && preg_match($k, $addr))) { return 1; } } return; } function is_allowed_user(&$usr, $simple=0) { /* Check if the ban expired. */ if (($banned = $usr->users_opt & 65536) && $usr->ban_expiry && $usr->ban_expiry < __request_timestamp__) { q('UPDATE fud30_users SET users_opt = '. q_bitand('users_opt', ~65536) .' WHERE id='. $usr->id); $usr->users_opt ^= 65536; $banned = 0; } if ($banned || is_email_blocked($usr->email) || is_login_blocked($usr->login) || is_ip_blocked(get_ip())) { $ban_expiry = (int) $usr->ban_expiry; $ban_reason = $usr->ban_reason; if (!$simple) { // On login page we already have anon session. ses_delete($usr->sid); $usr = ses_anon_make(); } setcookie($GLOBALS['COOKIE_NAME'].'1', 'd34db33fd34db33fd34db33fd34db33f', ($ban_expiry ? $ban_expiry : (__request_timestamp__ + 63072000)), $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); if ($banned) { error_dialog('ERROR: You have been banned.', 'Your account was '.($ban_expiry ? 'temporarily banned until '.print_date('%a, %d %B %Y %H:%M', $ban_expiry).'' : 'permanently banned' ) .' from accessing the site, due to a violation of the forum's rules.

    '.$ban_reason.''); } else { error_dialog('ERROR: Your account has been filtered out.', 'Your account has been blocked from accessing the forum due to one of the installed user filters.'); } } if ($simple) { return; } if ($GLOBALS['FUD_OPT_1'] & 1048576 && $usr->users_opt & 262144) { error_dialog('ERROR: Your account is not yet confirmed', 'We have not received a confirmation from your parent and/or legal guardian, which would allow you to post messages. If you lost your COPPA form, view it again.'); } if ($GLOBALS['FUD_OPT_2'] & 1 && !($usr->users_opt & 131072)) { std_error('emailconf'); } if ($GLOBALS['FUD_OPT_2'] & 1024 && $usr->users_opt & 2097152) { error_dialog('Unverified Account', 'The administrator had chosen to review all accounts manually prior to activation. Until your account has been validated by the administrator you will not be able to utilize the full capabilities of your account.'); } } ?> PK!: return.incnu[ PK!e post_opt.incnu[HTML code is off'; $post_opt_fud = 'BBcode is off'; $post_opt_images = 'Images are off'; $post_opt_smilies = 'Smilies are off'; $edit_time_limit = ''; if (is_int($arg)) { if ($arg & 16) { $post_opt_fud = 'BBcode is on'; } else if (!($arg & 8)) { $post_opt_html = 'HTML is on'; } if ($perms & 16384) { $post_opt_smilies = 'Smilies are on'; } if ($perms & 32768) { $post_opt_images = 'Images are on'; } if ($GLOBALS['EDIT_TIME_LIMIT'] >= 0) { // Time limit enabled, $edit_time_limit = $GLOBALS['EDIT_TIME_LIMIT'] ? '
    Editing Time Limit: '.$GLOBALS['EDIT_TIME_LIMIT'].' minutes' : '
    Editing Time Limit: Unlimited'; } } else if ($arg == 'private') { $o =& $GLOBALS['FUD_OPT_1']; if ($o & 4096) { $post_opt_fud = 'BBcode is on'; } else if (!($o & 2048)) { $post_opt_html = 'HTML is on'; } if ($o & 16384) { $post_opt_images = 'Images are on'; } if ($o & 8192) { $post_opt_smilies = 'Smilies are on'; } } else if ($arg == 'sig') { $o =& $GLOBALS['FUD_OPT_1']; if ($o & 131072) { $post_opt_fud = 'BBcode is on'; } else if (!($o & 65536)) { $post_opt_html = 'HTML is on'; } if ($o & 524288) { $post_opt_images = 'Images are on'; } if ($o & 262144) { $post_opt_smilies = 'Smilies are on'; } } return 'Forum Options:
    '.$post_opt_html.'
    '.$post_opt_fud.'
    '.$post_opt_images.'
    '.$post_opt_smilies.$edit_time_limit.'
    '; } ?> PK!tabs.incnu['uc', 'Account Settings'=>'register', 'Subscriptions'=>'subscribed', 'Bookmarks'=>'bookmarked', 'Referrals'=>'referals', 'Buddy List'=>'buddy_list', 'Ignore List'=>'ignore_list', 'Show Own Posts'=>'showposts' ); if (!($FUD_OPT_2 & 8192)) { unset($tablist['Referrals']); } if (isset($_POST['mod_id'])) { $mod_id_chk = $_POST['mod_id']; } else if (isset($_GET['mod_id'])) { $mod_id_chk = $_GET['mod_id']; } else { $mod_id_chk = null; } if (!$mod_id_chk) { if ($FUD_OPT_1 & 1024) { $tablist['Private Messaging'] = 'pmsg'; } $pg = ($_GET['t'] == 'pmsg_view' || $_GET['t'] == 'ppost') ? 'pmsg' : $_GET['t']; foreach($tablist as $tab_name => $tab) { $tab_url = '[[relativeurl]]/index.php?t='. $tab . (s ? '&S='. s : ''); if ($tab == 'referals') { if (!($FUD_OPT_2 & 8192)) { continue; } $tab_url .= '&id='. _uid; } else if ($tab == 'showposts') { $tab_url .= '&id='. _uid; } $tabs .= $pg == $tab ? '
    '.$tab_name.'
    ' : '
    '.$tab_name.'
    '; } $tabs = ' '.$tabs.'
    '; } } ?> PK!"X&& drawpmsg.incnu[users_opt; $b =& $usr->users_opt; if (!$mini) { $custom_tag = $obj->custom_status ? '
    '.$obj->custom_status.'' : ''; $c = (int) $obj->level_opt; if ($obj->avatar_loc && $a & 8388608 && $b & 8192 && $o1 & 28 && !($c & 2)) { if (!($c & 1)) { $level_name =& $obj->level_name; $level_image = $obj->level_img ? ' ' : ''; } else { $level_name = $level_image = ''; } } else { $level_image = $obj->level_img ? ' ' : ''; $obj->avatar_loc = ''; $level_name =& $obj->level_name; } $avatar = ($obj->avatar_loc || $level_image) ? ''.$obj->avatar_loc.$level_image.'' : ''; $dmsg_tags = ($custom_tag || $level_name) ? '
    '.$level_name.$custom_tag.'
    ' : ''; if (($o2 & 32 && !($a & 32768)) || $b & 1048576) { $obj->login = $obj->alias; $online_indicator = (($obj->last_visit + $GLOBALS['LOGEDIN_TIMEOUT'] * 60) > __request_timestamp__) ? ''.$obj->login.' is currently online' : ''.$obj->login.' is currently offline'; } else { $online_indicator = ''; } if ($obj->location) { if (strlen($obj->location) > $GLOBALS['MAX_LOCATION_SHOW']) { $location = substr($obj->location, 0, $GLOBALS['MAX_LOCATION_SHOW']) .'...'; } else { $location = $obj->location; } $location = '
    Location: '.$location; } else { $location = ''; } $usr->buddy_list = $usr->buddy_list ? unserialize($usr->buddy_list) : array(); if ($obj->user_id != _uid && $obj->user_id > 0) { $buddy_link = !isset($usr->buddy_list[$obj->user_id]) ? 'add to buddy list
    ' : '
    [remove from buddy list]'; } else { $buddy_link = ''; } /* Show im buttons if need be. */ if ($b & 16384) { $im = ''; if ($obj->icq) { $im .= ' '; } if ($obj->facebook) { $im .= ' '; } if ($obj->yahoo) { $im .= ' '; } if ($obj->jabber) { $im .= ''; } if ($obj->google) { $im .= ''; } if ($obj->skype) { $im .= ''; } if ($obj->twitter) { $im .= ''; } if ($im) { $dmsg_im_row = ''.$im.'
    '; } else { $dmsg_im_row = ''; } } else { $dmsg_im_row = ''; } if ($obj->ouser_id != _uid) { $user_profile = ''; $email_link = ($o1 & 4194304 && $a & 16) ? '' : ''; $private_msg_link = ''; } else { $user_profile = $email_link = $private_msg_link = ''; } $msg_toolbar = '
    '.$user_profile.' '.$email_link.' '.$private_msg_link.'  '.($obj->fldr == 4 ? '    ' : '' ) .($obj->fldr == 1 ? '  ' : '' ) .'
    '; } else { $dmsg_tags = $dmsg_im_row = $user_profile = $msg_toolbar = $buddy_link = $avatar = $online_indicator = $host_name = $location = ''; } if ($obj->length > 0) { $msg_body = read_pmsg_body($obj->foff, $obj->length); } else { $msg_body = 'No Message Body'; } $msg_body = $obj->length ? read_pmsg_body($obj->foff, $obj->length) : 'No Message Body'; $file_attachments = ''; if ($obj->attach_cnt) { $c = uq('SELECT a.id, a.original_name, a.dlcount, m.icon, a.fsize FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.message_id='. $obj->id .' AND attach_opt=1'); while ($r = db_rowobj($c)) { $sz = $r->fsize/1024; $sz = $sz<1000 ? number_format($sz, 2) .'KB' : number_format($sz / 1024 ,2) .'MB'; if(!$r->icon) { $r->icon = 'unknown.gif'; } $file_attachments .= '
  • Attachment: '.$r->original_name.'
    (Size: '.$sz.', Downloaded '.convertPlural($r->dlcount, array(''.$r->dlcount.' time',''.$r->dlcount.' times')).')
  • '; } unset($c); if ($file_attachments) { $file_attachments = ''; /* Append session to getfile. */ if ($o1 & 128 && !isset($_COOKIE[$GLOBALS['COOKIE_NAME']])) { $msg_body = str_replace(' '.$msg_toolbar.'
    '.(!$mini && $obj->icon ? '  ' : '' ) .''.$obj->subject.' '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'
    '.$avatar.'
    '.$online_indicator.(!$mini ? ''.htmlspecialchars($obj->alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' : ''.htmlspecialchars($obj->alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' ) .(!$mini ? '
    Messages: '.$obj->posted_msg_count.'
    Registered: '.print_date('%B %Y', $obj->join_date).' '.$location.'' : '' ) .'
    '.$dmsg_tags.' '.$buddy_link.$dmsg_im_row.(!$mini && $obj->host_name && $o1 & 268435456 ? 'From: '.$obj->host_name.'
    ' : '' ) .'
    '.$msg_body.' '.$file_attachments.' '.(($obj->sig && $o1 & 32768 && $obj->pmsg_opt & 1 && $b & 4096) ? '

    '.$obj->sig.'
    ' : '' ) .'
    '.$GLOBALS['dpmsg_prev_message'].' '.$GLOBALS['dpmsg_next_message'].'
    '; } ?> PK! private.incnu[post_stamp = __request_timestamp__; $this->ip_addr = get_ip(); $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; if ($this->fldr != 1) { $this->read_stamp = $this->post_stamp; } if ($GLOBALS['FUD_OPT_3'] & 32768) { $this->foff = $this->length = -1; } else { list($this->foff, $this->length) = write_pmsg_body($this->body); } $this->id = db_qid('INSERT INTO fud30_pmsg ( ouser_id, duser_id, pdest, to_list, ip_addr, host_name, post_stamp, icon, fldr, subject, attach_cnt, read_stamp, ref_msg_id, foff, length, pmsg_opt ) VALUES( '. $this->ouser_id .', '. ($this->duser_id ? $this->duser_id : $this->ouser_id) .', '. (isset($GLOBALS['recv_user_id'][0]) ? (int)$GLOBALS['recv_user_id'][0] : '0') .', '. ssn($this->to_list) .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->icon) .', '. $this->fldr .', '. _esc($this->subject) .', '. (int)$this->attach_cnt .', '. $this->read_stamp .', '. ssn($this->ref_msg_id) .', '. (int)$this->foff .', '. (int)$this->length .', '. $this->pmsg_opt .' )'); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $this->id); } if ($this->fldr == 3 && !$track) { $this->send_pmsg(); } } function send_pmsg() { $this->pmsg_opt |= 16|32; $this->pmsg_opt &= 16|32|1|2|4; foreach($GLOBALS['recv_user_id'] as $v) { $id = db_qid('INSERT INTO fud30_pmsg ( to_list, ouser_id, ip_addr, host_name, post_stamp, icon, fldr, subject, attach_cnt, foff, length, duser_id, ref_msg_id, pmsg_opt ) VALUES ( '. ssn($this->to_list).', '. $this->ouser_id .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->icon) .', 1, '. _esc($this->subject) .', '. (int)$this->attach_cnt .', '. $this->foff .', '. $this->length .', '. $v .', '. ssn($this->ref_msg_id) .', '. $this->pmsg_opt .')'); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $id); } $GLOBALS['send_to_array'][] = array($v, $id); $um[$v] = $id; } $c = uq('SELECT id, email FROM fud30_users WHERE id IN('. implode(',', $GLOBALS['recv_user_id']) .') AND users_opt>=64 AND '. q_bitand('users_opt', 64) .' > 0'); $from = reverse_fmt($GLOBALS['usr']->alias); $subject = reverse_fmt($this->subject); while ($r = db_rowarr($c)) { /* Do not send notifications about messages sent to self. */ if ($r[0] == $this->ouser_id) { continue; } send_pm_notification($r[1], $um[$r[0]], $subject, $from); } unset($c); } function sync() { $this->post_stamp = __request_timestamp__; $this->ip_addr = get_ip(); $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE if ($fid = q_singleval('SELECT length FROM fud30_pmsg WHERE id='. $this->id .' AND foff!=-1')) { q('DELETE FROM fud30_msg_store WHERE id='. $this->length); } $this->foff = $this->length = -1; } else { list($this->foff, $this->length) = write_pmsg_body($this->body); } q('UPDATE fud30_pmsg SET to_list='. ssn($this->to_list) .', icon='. ssn($this->icon) .', ouser_id='. $this->ouser_id .', duser_id='. $this->ouser_id .', post_stamp='. $this->post_stamp .', subject='. _esc($this->subject) .', ip_addr=\''. $this->ip_addr .'\', host_name='. $this->host_name .', attach_cnt='. (int)$this->attach_cnt .', fldr='. $this->fldr .', foff='. (int)$this->foff .', length='. (int)$this->length .', pmsg_opt='. $this->pmsg_opt .' WHERE id='. $this->id); if ($GLOBALS['FUD_OPT_3'] & 32768 && $this->body) { $fid = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); q('UPDATE fud30_pmsg SET length='. $fid .' WHERE id='. $this->id); } if ($this->fldr == 3) { $this->send_pmsg(); } } } function write_pmsg_body($text) { if (($ll = !db_locked())) { db_lock('fud30_fl_pm WRITE'); } $fp = fopen($GLOBALS['MSG_STORE_DIR'] .'private', 'ab'); if (!$fp) { exit("FATAL ERROR: cannot open private message store
    \n"); } fseek($fp, 0, SEEK_END); if (!($s = ftell($fp))) { $s = __ffilesize($fp); } if (($len = fwrite($fp, $text)) !== strlen($text)) { exit("FATAL ERROR: system has ran out of disk space
    \n"); } fclose($fp); if ($ll) { db_unlock(); } if (!$s) { @chmod($GLOBALS['MSG_STORE_DIR'] .'private', ($GLOBALS['FUD_OPT_2'] & 8388608 ? 0600 : 0644)); } return array($s, $len); } function read_pmsg_body($offset, $length) { if ($length < 1) { return; } if ($GLOBALS['FUD_OPT_3'] & 32768 && $offset == -1) { return q_singleval('SELECT data FROM fud30_msg_store WHERE id='. $length); } $fp = fopen($GLOBALS['MSG_STORE_DIR'].'private', 'rb'); fseek($fp, $offset, SEEK_SET); $str = fread($fp, $length); fclose($fp); return $str; } function pmsg_move($mid, $fid, $validate) { if (!$validate && !q_singleval('SELECT id FROM fud30_pmsg WHERE duser_id='. _uid .' AND id='. $mid)) { return; } q('UPDATE fud30_pmsg SET fldr='. $fid .' WHERE duser_id='. _uid .' AND id='. $mid); } function pmsg_del($mid, $fldr=0) { if (!$fldr && !($fldr = q_singleval('SELECT fldr FROM fud30_pmsg WHERE duser_id='. _uid .' AND id='. $mid))) { return; } if ($fldr != 5) { pmsg_move($mid, 5, 0); } else { if ($GLOBALS['FUD_OPT_3'] & 32768 && ($fid = q_singleval('SELECT length FROM fud30_pmsg WHERE id='. $mid .' AND foff=-1'))) { q('DELETE FROM fud30_msg_store WHERE id='. $fid); } q('DELETE FROM fud30_pmsg WHERE id='.$mid); $c = uq('SELECT id FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=1'); while ($r = db_rowarr($c)) { @unlink($GLOBALS['FILE_STORE'] . $r[0] .'.atch'); } unset($c); q('DELETE FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=1'); } } function send_pm_notification($email, $pid, $subject, $from) { send_email($GLOBALS['NOTIFY_FROM'], $email, '['.$GLOBALS['FORUM_TITLE'].'] New Private Message Notification', 'You have a new private message titled "'.$subject.'", from "'.$from.'", in the forum "'.$GLOBALS['FORUM_TITLE'].'".\nTo view the message, click here: [[softurl]]/index.php?t=pmsg_view&id='.$pid.'\n\nTo stop future notifications, disable "Private Message Notification" in your profile.'); } ?> PK!k k th_nav.incnu[ Previous Topic: '.$r[1].' '; } else { if ($r[3]) { /* Moved topic, let's try to find another, */ $nn = 1; continue; } $next = ' Next Topic: '.$r[1].' '; } } unset($c); if ($np) { $r = db_saq(q_limit('SELECT m.id, m.subject FROM fud30_tv_'. $frm_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id INNER JOIN fud30_msg m ON t.root_msg_id=m.id WHERE tv.seq IN('. ($id - 10) .', '. ($id - 2) .') ORDER BY tv.seq ASC', 1)); $prev = ' Previous Topic: '.$r[1].' '; } if ($nn) { $r = db_saq(q_limit('SELECT m.id, m.subject FROM fud30_tv_'. $frm_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id INNER JOIN fud30_msg m ON t.root_msg_id=m.id WHERE tv.seq IN('. ($id + 2) .', '. ($id + 10) .') ORDER BY tv.seq DESC', 1)); $next = ' Next Topic: '.$r[1].' '; } } ?>PK!"post_common.incnu[ $GLOBALS['MAX_SMILIES_SHOWN']) { $limit = $GLOBALS['MAX_SMILIES_SHOWN']; } $smilies = ''; $i = 0; while ($i < $limit) { $smilies .= ''.$PS_SRC[$i++].' '; } return ' Smiley Shortcuts:
    [ list all smilies ] '.$smilies.' '; } function draw_post_icons($msg_icon) { include $GLOBALS['FORUM_SETTINGS_PATH'] .'icon_cache'; /* Nothing to do. */ if (!$ICON_L) { return; } $tmp = $data = ''; $rl = (int) $GLOBALS['POST_ICONS_PER_ROW']; foreach ($ICON_L as $k => $f) { if ($k && !($k % $rl)) { $data .= ''.$tmp.''; $tmp = ''; } $tmp .= ''; } if ($tmp) { $data .= ''.$tmp.''; } return ' Message Icon: '.$data.'
    No Icon
    '; } function draw_post_attachments($al, $max_as, $max_a, $attach_control_error, $private, $msg_id) { $attached_files = ''; $i = 0; if (!empty($al)) { $enc = base64_encode(serialize($al)); ses_putvar((int)$GLOBALS['usr']->sid, md5($enc)); $c = uq('SELECT a.id,a.fsize,a.original_name,m.mime_hdr FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.id IN('. implode(',', $al) .') AND message_id IN(0, '. $msg_id .') AND attach_opt='. ($private ? 1 : 0)); while ($r = db_rowarr($c)) { $sz = ( $r[1] < 100000 ) ? number_format($r[1]/1024,2) .'KB' : number_format($r[1]/1048576,2) .'MB'; $insert_uploaded_image = strncasecmp('image/', $r[3], 6) ? '' : ' | Insert image into message body'; $attached_files .= ' '.$r[2].' '.$sz.' Delete'.$insert_uploaded_image.' '; $i++; } unset($c); } if (!$private && $GLOBALS['MOD'] && $GLOBALS['frm']->forum_opt & 32) { $allowed_extensions = '(unrestricted)'; } else { include $GLOBALS['FORUM_SETTINGS_PATH'] .'file_filter_regexp'; if (empty($GLOBALS['__FUD_EXT_FILER__'])) { $allowed_extensions = '(unrestricted)'; } else { $allowed_extensions = implode(' ', $GLOBALS['__FUD_EXT_FILER__']); } } $max_as_k = round($max_as / 1024); // We display max attch size in KB. return 'File Attachments: '.($i ? ' '.$attached_files.'
    Name Size Action
    ' : '' ) .' '.(isset($enc) ? '' : '' ) .' '.$attach_control_error.' Allowed File Extensions: '.$allowed_extensions.'
    Maximum File Size: '.$max_as_k.'KB
    Maximum Files Per Message: '.$max_a.($i ? '; currently attached: '.$i.' '.convertPlural($i, array('file','files')).'' : '' ) .'
    '.((($i + 1) <= $max_a) ? ' ' : '' ) .' '; } ?> PK!oM55err.incnu[sid; } // Log the error. if (defined('fud_logging') || $level !== 'INFO') { // Build error string. $error_msg = '[Error] '. $title .'
    '; $error_msg .= '[Message to User] '. trim($msg) .'
    '; $error_msg .= '[User IP] '. get_ip() .'
    '; $error_msg .= '[Requested URL] http://'; $error_msg .= isset($_SERVER['HTTP_HOST']) ? htmlspecialchars($_SERVER['HTTP_HOST']) : ''; $error_msg .= isset($_SERVER['REQUEST_URI']) ? htmlspecialchars($_SERVER['REQUEST_URI']) : ''; // Mask out sensitive data. unset($_POST['password']); unset($_POST['quick_password']); $error_msg .= !empty($_POST) ? '
    [Post-Data] '. htmlspecialchars(serialize($_POST)) : ''; $error_msg .= '
    '; if (isset($_SERVER['HTTP_REFERER'])) { $error_msg .= '[Referring URL] '. htmlspecialchars($_SERVER['HTTP_REFERER']) .'
    '; } else if (isset($_SERVER['HTTP_USER_AGENT'])) { $error_msg .= '[User Agent] '. htmlspecialchars($_SERVER['HTTP_USER_AGENT']) .'
    '; } fud_logerror($error_msg, 'fud_errors'); } // No need to redirect, we just want to log the error. if ($level == 'LOG&RETURN') { return; } // Store persistently. ses_putvar($ses, array('er_msg' => $msg, 'err_t' => $title)); // Redirect to error template. if (is_int($ses)) { if ($GLOBALS['FUD_OPT_2'] & 32768) { header('Location: [[relativeurl]]/index.php/e/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=error&'. _rsidl); } } else { if ($GLOBALS['FUD_OPT_2'] & 32768) { header('Location: [[relativeurl]]/index.php/e/0/'. $ses); } else { header('Location: [[relativeurl]]/index.php?t=error&S='. $ses); } } exit; } /** Signal standard errors. */ function std_error($type) { if (!isset($_SERVER['HTTP_REFERER'])) { $_SERVER['HTTP_REFERER'] = 'unknown'; } $ses_id = s; $usr_d = new stdClass(); $usr_d->email = $GLOBALS['usr']->email; if ($type == 'login') { if (__fud_real_user__) { $type = 'perms'; } else { ses_anonuser_auth($GLOBALS['usr']->sid, '
    ERROR: You are not logged-inTo access this page you must be a member of this forum.

    '); } } $err_array = array( 'ERR_disabled'=>array('Disabled feature', 'This feature has been disabled by the system administrator.'), 'ERR_access'=>array('ERROR: Insufficient Permissions', 'You do not have the required permissions to perform this action.'), 'ERR_registration_disabled'=>array('Registration Disabled', 'The administrator has disabled registration. Please try again later.'), 'ERR_user'=>array('ERROR: No such user', 'There is no such user'), 'ERR_perms'=>array('Permission Denied!', 'Your user permissions do not allow you to perform the action you are attempting.'), 'ERR_systemerr'=>array('ERROR: System Error', 'A system error has occurred. Please report it to the webmaster.'), 'ERR_emailconf'=>array('ERROR: Your account is not yet confirmed', 'You have not confirmed your account via e-mail yet.
    1. If you have not received a confirmation e-mail, request it again.
    2. If '.$usr_d->email.' is not your correct e-mail address, specify the correct address.
    ') ); if (isset($err_array['ERR_'. $type])) { $err = $err_array['ERR_'. $type]; error_dialog($err[0], $err[1]); } error_dialog('Critical error', 'An error has occurred. Unfortunately, there is also a problem with the error reporting system.'); } /** Signal an invalid input error. */ function invl_inp_err() { error_dialog('Invalid Input', 'You have followed an invalid link. Please notify the webmaster how you got here.', 'INFO'); } ?> PK!T5vvthread_view_common.incnu[group_cache_opt & 2) && !$res->forum_id)) { return; } return 1; } /* Make sure that we have what appears to be a valid forum id. */ if (!isset($_GET['frm_id']) || (!($frm_id = (int)$_GET['frm_id']))) { invl_inp_err(); } if (!isset($_GET['start']) || ($start = (int)$_GET['start']) < 1) { $start = 0; } /* This query creates frm object that contains info about the current * forum, category & user's subscription status & permissions to the * forum. */ make_perms_query($fields, $join, $frm_id); $frm = db_sab(q_limit('SELECT f.id, f.name, f.thread_count, f.cat_id,'. (_uid ? ' fn.forum_id AS subscribed, m.forum_id AS md, ' : ' 0 AS subscribed, 0 AS md, '). 'a.ann_id AS is_ann, ms.post_stamp, '. $fields .' FROM fud30_forum f INNER JOIN fud30_cat c ON c.id=f.cat_id '. (_uid ? ' LEFT JOIN fud30_forum_notify fn ON fn.user_id='._uid.' AND fn.forum_id='. $frm_id .' LEFT JOIN fud30_mod m ON m.user_id='. _uid .' AND m.forum_id='. $frm_id : ' ') .$join.' LEFT JOIN fud30_ann_forums a ON a.forum_id='. $frm_id .' LEFT JOIN fud30_msg ms ON ms.id=f.last_post_id WHERE f.id='. $frm_id, 1)); if (!$frm) { invl_inp_err(); } $frm->forum_id = $frm->id; $MOD = ($is_a || $frm->md); $lwi = q_singleval(q_limit('SELECT seq FROM fud30_tv_'. $frm_id .' ORDER BY seq DESC', 1)); /* Check that the user has permissions to access this forum. */ if (!($frm->group_cache_opt & 2) && !$MOD) { if (!isset($_GET['logoff'])) { std_error('login'); } if ($FUD_OPT_2 & 32768) { header('Location: [[relativeurl]]/index.php/i/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?'. _rsidl); } exit; } if ($_GET['t'] == 'threadt') { $cur_frm_page = $start + 1; } else { $cur_frm_page = floor($start / $THREADS_PER_PAGE) + 1; } /* Do various things for registered users. */ if (_uid) { if (isset($_GET['sub']) && sq_check(0, $usr->sq)) { forum_notify_add(_uid, $frm->id); $frm->subscribed = 1; } else if (isset($_GET['unsub']) && sq_check(0, $usr->sq)) { forum_notify_del(_uid, $frm->id); $frm->subscribed = 0; } } else if (__fud_cache((int)$frm->post_stamp)) { return; } $ppg = $usr->posts_ppg ? $usr->posts_ppg : $POSTS_PER_PAGE; /* Handling of forum level announcements (should be merged with non-forum announcements in index.php.t). */ $announcements = ''; if ($frm->is_ann) { $today = gmdate('Ymd', __request_timestamp__); $res = uq('SELECT a.subject, a.text, a.ann_opt FROM fud30_announce a INNER JOIN fud30_ann_forums af ON a.id=af.ann_id AND af.forum_id='. $frm->id .' WHERE a.date_started<='. $today .' AND a.date_ended>='. $today); while ($r = db_rowarr($res)) { if (!_uid && $r[2] & 2) { continue; // Only for logged in users. } if (_uid && $r['2'] & 4) { continue; // Only for anonomous users. } if (defined('plugins')) { list($r[0], $r[1]) = plugin_call_hook('ANNOUNCEMENT', array($r[0], $r[1])); } $announcements .= '
    '.$r[0].' '.$r[1].'
    '; } unset($res); } ?> PK!*%%draw_forum_list.incnu[cat_collapse_status ? unserialize($usr->cat_collapse_status) : array(); $cat_id = !empty($_GET['cat']) ? (int) $_GET['cat'] : 0; $frm_id = !empty($_GET['frm_id']) ? (int) $_GET['frm_id'] : 0; if ($cat_id && !empty($collapse[$cat_id])) { $collapse[$cat_id] = 0; } require $FORUM_SETTINGS_PATH .'idx.inc'; if (!isset($cidxc[$cat_id])) { $cat_id = 0; } $cbuf = $forum_list_table_data = $cat_path = ''; if ($cat_id) { $cid = $cat_id; while (($cid = $cidxc[$cid][4]) > 0) { $cat_path = ' » '.$cidxc[$cid][1].''. $cat_path; } $cat_path = '
    Home '.$cat_path.' » '.$cidxc[$cat_id][1].''; } /* List of fetched fields & their ids 0 msg.subject, 1 msg.id AS msg_id, 2 msg.post_stamp, 3 users.id AS user_id, 4 users.alias 5 forum.cat_id, 6 forum.forum_icon 7 forum.id 8 forum.last_post_id 9 forum.moderators 10 forum.name 11 forum.descr 12 forum.url_redirect 13 forum.post_count 14 forum.thread_count 15 forum_read.last_view 16 is_moderator 17 read perm 18 is the category using compact view */ $c = uq('SELECT m.subject, m.id, m.post_stamp, u.id, u.alias, f.cat_id, f.forum_icon, f.id, f.last_post_id, f.moderators, f.name, f.descr, f.url_redirect, f.post_count, f.thread_count, '. (_uid ? 'fr.last_view, mo.id, COALESCE(g2.group_cache_opt, g1.group_cache_opt) AS group_cache_opt' : '0,0,g1.group_cache_opt') .', c.cat_opt FROM fud30_fc_view v INNER JOIN fud30_cat c ON c.id=v.c INNER JOIN fud30_forum f ON f.id=v.f INNER JOIN fud30_group_cache g1 ON g1.user_id='. (_uid ? 2147483647 : 0) .' AND g1.resource_id=f.id LEFT JOIN fud30_msg m ON f.last_post_id=m.id LEFT JOIN fud30_users u ON u.id=m.poster_id '. (_uid ? ' LEFT JOIN fud30_forum_read fr ON fr.forum_id=f.id AND fr.user_id='. _uid .' LEFT JOIN fud30_mod mo ON mo.user_id='. _uid .' AND mo.forum_id=f.id LEFT JOIN fud30_group_cache g2 ON g2.user_id='. _uid .' AND g2.resource_id=f.id' : ''). ' WHERE f.parent = '. $frm_id . ((!$is_a || $cat_id) ? ' AND ' : '') . ($is_a ? '' : (_uid ? ' (mo.id IS NOT NULL OR ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 1) .' > 0))' : ' ('. q_bitand('g1.group_cache_opt', 1) .' > 0)')) . ($cat_id ? ($is_a ? '' : ' AND ') .' v.c IN('. implode(',', ($cf = $cidxc[$cat_id][5])) .') ' : '') .' ORDER BY v.id'); $post_count = $thread_count = $last_msg_id = $cat = 0; while ($r = db_rowarr($c)) { /* Increase thread & post count. */ $post_count += $r[13]; $thread_count += $r[14]; $cid = (int) $r[5]; if ($cat != $cid && !$frm_id) { if ($cbuf) { /* If previous category was using compact view, print forum row. */ if (empty($collapse[$i[4]])) { /* Only show if parent is not collapsed as well. */ $forum_list_table_data .= '     Available Forums:'.$cbuf.' '; } $cbuf = ''; } foreach ($cidxc as $k => $i) { /* 2nd check ensures that we don't end up displaying categories without any children. */ if (($cat_id && !isset($cf[$k])) || ($cid != $k && $i[4] >= $cidxc[$cid][4])) { continue; } /* If parent category is collapsed, hide child category. */ if ($i[4] && !empty($collapse[$i[4]])) { $collapse[$k] = 1; } if ($k == $cid) { break; // Got it! } } $cat = $cid; if ($i[3] & 1 && $k != $cat_id && !($i[3] & 4)) { if (!isset($collapse[$k])) { $collapse[$k] = !($i[3] & 2); } $forum_list_table_data .= ' '.$i[1].' '.$i[2].' '.(key($cidxc) ? '' : '' ) .' '.($cat ? '' : '' ) .' '; } else { if ($i[3] & 4) { ++$i[0]; } $forum_list_table_data .= ' '.$i[1].' '.$i[2].' '.(key($cidxc) ? '' : '' ) .' '.($cat ? '' : '' ) .' '; } } /* Compact category view (ignore when expanded). */ if ($r[18] & 4 && $cat_id != $cid) { $cbuf .= '  '.(_uid && $r[15] < $r[2] && $usr->last_read < $r[2] ? '**' : '' ) .' '.$r[10].''; continue; } /* Visible forum with no 'read' permission. */ if (!($r[17] & 2) && !$is_a && !$r[16]) { $forum_list_table_data .= ' '.$r[10].($r[11] ? '
    '.$r[11] : '').' '; continue; } /* Code to determine the last post id for 'latest' forum message. */ if ($r[8] > $last_msg_id) { $last_msg_id = $r[8]; } if (!_uid) { /* Anon user. */ $forum_read_indicator = 'Only registered forum members can track read & unread messages'; } else if ($r[15] < $r[2] && $usr->last_read < $r[2]) { $forum_read_indicator = 'New messages'; } else { $forum_read_indicator = 'No new messages'; } if ($r[9] && ($mods = unserialize($r[9]))) { $moderators = ''; // List of forum moderators. $modcount = 0; // Use singular or plural message form. foreach($mods as $k => $v) { $moderators .= ''.$v.'  '; $modcount++; } $moderators = '
    '.convertPlural($modcount, array('Moderator','Moderators')).': '.$moderators.'
    '; } else { $moderators = ' '; } $forum_list_table_data .= ' '.($r[6] ? 'Forum Icon' : ' ' ) .' '.(empty($r[12]) ? ''.$forum_read_indicator.'' : '' ) .' '.$r[10].''.($r[11] ? '
    '.$r[11] : '').$moderators.' '.(empty($r[12]) ? ''.$r[13].'' : '--' ) .' '.(empty($r[12]) ? ''.$r[14].'' : '--' ) .' '.(empty($r[12]) ? ''.($r[8] ? ''.print_date('%a, %d %B %Y', $r[2]).'
    By: '.($r[3] ? ''.$r[4].'' : ''.$GLOBALS['ANON_NICK'].'' ) .' '.$r[0].'' : 'n/a' ) .'' : '--' ) .' '; } unset($c); if ($cbuf) { /* If previous category was using compact view, print forum row. */ $forum_list_table_data .= '     Available Forums:'.$cbuf.' '; } ?> PK!^pVpV users.incnu[id != 1 && (!$GLOBALS['is_post'] || sq_check(1, $u->sq, $u->id, $u->ses_id))) { /* Store the last visit date for registered user. */ q('UPDATE fud30_users SET last_visit='. __request_timestamp__ .' WHERE id='. $u->id); if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $u->ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if (!$u->sq || __request_timestamp__ - $u->last_visit > 180) { // 3 min. $u->sq = $sq = regen_sq($u->id); if (!$GLOBALS['is_post']) { $_GET['SQ'] = $sq; } else { $_POST['SQ'] = $sq; } } else { $sq =& $u->sq; } } // Prevent spiders from doing funny stuff. if (($u->users_opt & 1073741824) && $GLOBALS['is_post']) { // is_spider die('Bad bot!'); } /* Disable caching for registered users and POST requests. */ if ($GLOBALS['is_post'] || $u->id > 1) { header('Cache-Control: no-store, private, must-revalidate, proxy-revalidate, post-check=0, pre-check=0, max-age=0, s-maxage=0'); header('Expires: Mon, 21 Jan 1980 06:01:01 GMT'); header('Pragma: no-cache'); } if ($u->data) { $u->data = unserialize($u->data); } $uo = $u->users_opt = (int)$u->users_opt; /* This should allow path_info & normal themes to work properly within 1 forum. */ if ($o2 & 32768 && !($u->theme_opt & 4)) { $o2 ^= 32768; } /* Handle PM disabling for users. */ if (!($GLOBALS['is_a'] = $uo & 1048576) && $uo & 33554432) { $o1 = $o1 &~ 1024; } /* Set timezone. */ if (empty($u->time_zone) || @date_default_timezone_set($u->time_zone) === FALSE) { date_default_timezone_set($GLOBALS['SERVER_TZ']); } /* Set locale. */ $GLOBALS['good_locale'] = setlocale(LC_ALL, $u->locale); /* Call inituser plugins. */ if (defined('plugins')) { plugin_call_hook('INITUSER', $u); } /* View format for threads & messages. */ define('d_thread_view', $uo & 256 ? 'msg' : 'tree'); define('t_thread_view', $uo & 128 ? 'thread' : 'threadt'); if ($GLOBALS['t'] === 0) { $GLOBALS['t'] = $_GET['t'] = d_thread_view; } else if ($GLOBALS['t'] === 1) { $GLOBALS['t'] = $_GET['t'] = t_thread_view; } /* Define theme path, may already be set by a plugin. */ defined('fud_theme') or define('fud_theme', 'theme/'. ($u->theme_name ? $u->theme_name : 'default') .'/'); /* Define _uid, which, will tell us if this is a 'real' user or not. */ define('__fud_real_user__', ($u->id != 1 ? $u->id : 0)); define('_uid', __fud_real_user__ && ($uo & 131072) && !($uo & 2097152) ? $u->id : 0); /* Allow user to set their own topics per page value, as long as it is smaller then the max. */ if (__fud_real_user__ && $GLOBALS['THREADS_PER_PAGE'] > $u->topics_per_page) { $GLOBALS['THREADS_PER_PAGE'] = (int) $u->topics_per_page; } $GLOBALS['sq'] = $sq; /* Define constants used to track URL sessions & referrals. */ if ($o1 & 128) { define('s', $u->ses_id); define('_hs', ''); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'. s .'/'); } else { define('_rsid', 'rid='. __fud_real_user__ .'&S='. s); } } else { if ($o2 & 32768) { define('_rsid', s .'/'); } else { define('_rsid', 'S='. s); } } } else { define('s', ''); define('_hs', ''); if ($o2 & 8192) { if ($o2 & 32768) { define('_rsid', __fud_real_user__ .'/'); } else { define('_rsid', 'rid='. __fud_real_user__); } } else { define('_rsid', ''); } } define('_rsidl', ($o2 & 32768 ? _rsid : str_replace('&', '&', _rsid))); return $u; } function user_register_forum_view($frm_id) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view)'); return; } if (!db_li('INSERT INTO fud30_forum_read (forum_id, user_id, last_view) VALUES ('. $frm_id .', '. _uid .', '. __request_timestamp__ .')', $ef)) { q('UPDATE fud30_forum_read SET last_view='. __request_timestamp__ .' WHERE forum_id='. $frm_id .' AND user_id='. _uid); } } function user_register_thread_view($thread_id, $tm=__request_timestamp__, $msg_id=0) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .') ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); return; } if (!db_li('INSERT INTO fud30_read (last_view, msg_id, thread_id, user_id) VALUES('. $tm .', '. $msg_id .', '. $thread_id .', '. _uid .')', $ef)) { q('UPDATE fud30_read SET last_view='. $tm .', msg_id='. $msg_id .' WHERE thread_id='. $thread_id .' AND user_id='. _uid); } } function user_set_post_count($uid) { $pd = db_saq('SELECT MAX(id), count(*) FROM fud30_msg WHERE poster_id='. $uid .' AND apr=1'); $level_id = (int) q_singleval(q_limit('SELECT id FROM fud30_level WHERE post_count <= '. $pd[1] .' ORDER BY post_count DESC', 1)); q('UPDATE fud30_users SET u_last_post_id='. (int)$pd[0] .', posted_msg_count='. (int)$pd[1] .', level_id='. $level_id .' WHERE id='. $uid); } function user_mark_all_read($id) { q('UPDATE fud30_users SET last_read='. __request_timestamp__ .' WHERE id='. $id); q('DELETE FROM fud30_read WHERE user_id='. $id); q('DELETE FROM fud30_forum_read WHERE user_id='. $id); } function user_mark_forum_read($id, $fid, $last_view) { if (__dbtype__ == 'mysql') { // MySQL optimization. q('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .' ON DUPLICATE KEY UPDATE last_view=VALUES(last_view), msg_id=VALUES(msg_id)'); } else if (__dbtype__ == 'sqlite') { // SQLite optimization. q('REPLACE INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view); } else { // Other databases. if (!db_li('INSERT INTO fud30_read (user_id, thread_id, msg_id, last_view) SELECT '. $id .', id, last_post_id, '. __request_timestamp__ .' FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view, $ef)) { q('UPDATE fud30_read SET user_id='. $id .', msg_id=t.last_post_id, last_view='. __request_timestamp__ .' FROM (SELECT id, last_post_id FROM fud30_thread WHERE forum_id='. $fid .' AND last_post_date > '. $last_view .') t WHERE user_id='. $id .' AND thread_id=t.id'); } } user_register_forum_view($fid); } function sq_check($post, &$sq, $uid=__fud_real_user__, $ses=s) { /* No sequence # check for anonymous users. */ if (!$uid) { return 1; } if ($post && isset($_POST['SQ'])) { $s = $_POST['SQ']; } else if (!$post && isset($_GET['SQ'])) { $s = $_GET['SQ']; } else { $s = 0; } if ($sq !== $s) { if ($GLOBALS['t'] == 'post' || $GLOBALS['t'] == 'ppost') { define('fud_bad_sq', 1); $sq = regen_sq($uid); return 1; } header('Location: [[relativeurl]]/index.php?S='. $ses); exit; } return 1; } function regen_sq($uid=__fud_real_user__) { $sq = md5(get_random_value(128)); q('UPDATE fud30_users SET sq=\''. $sq .'\' WHERE id='. $uid); return $sq; } // Initialize user session. if (isset($_SERVER['REMOTE_ADDR']) && !defined('no_session')) { $GLOBALS['usr'] = init_user(); } ?> PK!Yw cookies.incnu[ '. (__request_timestamp__ - $GLOBALS['SESSION_TIMEOUT']); } else { /* Unknown user, maybe bot? */ // Auto login authorized bots. // To test: wget --user-agent="Googlebot 1.2" http://127.0.0.1:8080/forum $spider_session = 0; $my_ip = get_ip(); include $GLOBALS['FORUM_SETTINGS_PATH'] .'spider_cache'; foreach ($spider_cache as $spider_id => $spider) { if (preg_match('/'. $spider['useragent'] .'/i', $_SERVER['HTTP_USER_AGENT'])) { if (empty($spider['bot_ip'])) { $spider_session = 1; // Agent matched, no IPs to check. break; } else { foreach (explode(',', $spider['bot_ip']) as $bot_ip) { if (!($bot_ip = trim($bot_ip))) { continue; } if (strpos($bot_ip, $my_ip) === 0) { $spider_session = 1; // Agent and an IP matched. break; } } } } } if ($spider_session) { if ($spider['bot_opts'] & 2) { // Access blocked. die('Go away!'); } if ($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $spider['botname'] .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc($my_ip) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $spider['user_id'] .')', $ef, 1)) { $q_opt = 's.id='. $id; } else { $q_opt = 's.ses_id='. _esc($spider['botname']); } $GLOBALS['FUD_OPT_1'] ^= 128; // Disable URL sessions for user. } else { /* NeXuS: What is this? Return if user unknown? Function should return only after the query is run. */ //return; // Check sys_id, ip_addr and useragent for a possible match $q_opt = 's.sys_id= '._esc(ses_make_sysid()). ' AND s.ip_addr='._esc(get_ip()). ' AND s.useragent='._esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)); } } /* ENABLE_REFERRER_CHECK */ if ($GLOBALS['FUD_OPT_3'] & 4 && isset($_SERVER['HTTP_REFERER']) && strncmp($_SERVER['HTTP_REFERER'], $GLOBALS['WWW_ROOT'], strlen($GLOBALS['WWW_ROOT']))) { /* More checks, we need those because some proxies mangle referer field. */ $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; /* $p > 8 https:// or http:// */ if (($p = strpos($_SERVER['HTTP_REFERER'], $host)) === false || $p > 8) { $q_opt .= ' AND s.user_id > 2000000000 '; // Different referrer, force anonymous. } } } else { $q_opt = 's.id='. $id; } $u = db_sab('SELECT s.id AS sid, s.ses_id, s.data, s.returnto, s.sys_id, t.id AS theme_id, t.lang, t.name AS theme_name, t.locale, t.theme, t.pspell_lang, t.theme_opt, u.alias, u.posts_ppg, u.time_zone, u.sig, u.last_visit, u.last_read, u.cat_collapse_status, u.users_opt, u.posted_msg_count, u.topics_per_page, u.ignore_list, u.ignore_list, u.buddy_list, u.id, u.group_leader_list, u.email, u.login, u.sq, u.ban_expiry, u.ban_reason, u.flag_cc FROM fud30_ses s INNER JOIN fud30_users u ON u.id=(CASE WHEN s.user_id>2000000000 THEN 1 ELSE s.user_id END) LEFT OUTER JOIN fud30_themes t ON t.id=u.theme WHERE '. $q_opt); /* Anon user, no session or login. */ if (!$u || $u->id == 1 || $id) { return $u; } if ($u->sys_id == ses_make_sysid()) { return $u; } else if ($GLOBALS['FUD_OPT_3'] & 16 || isset($url_session)) { /* URL sessions must validate sys_id check and SESSION_IP_CHECK must be disabled */ return; } /* Try doing a strict SQ match in last-ditch effort to make things 'work'. */ if (isset($_POST['SQ']) && $_POST['SQ'] == $u->sq) { return $u; } return; } /** Create an anonymous session. */ function ses_anon_make() { // Prevent forum scraping and brute force attacks. if ($GLOBALS['MAX_CALLS_FROM_IP'] > 0) { $ip_count = q_singleval('SELECT count(ip_addr) FROM fud30_ses WHERE ip_addr = '. _esc(get_ip())); if ($ip_count > $GLOBALS['MAX_CALLS_FROM_IP']) { header('HTTP/1.1 429 Too Many Requests', true, 429); echo 'Too Many Requests'; die(); } } do { $uid = 2000000000 + mt_rand(1, 147483647); $ses_id = md5($uid . __request_timestamp__ . getmypid()); } while (!($id = db_li('INSERT INTO fud30_ses (ses_id, time_sec, sys_id, ip_addr, useragent, user_id) VALUES (\''. $ses_id .'\', '. __request_timestamp__ .', '. _esc(ses_make_sysid()) .', '. _esc(get_ip()) .', '. _esc(substr($_SERVER['HTTP_USER_AGENT'], 0, 64)) .', '. $uid .')', $ef, 1))); /* When we have an anon user, we set a special cookie allowing us to see who referred this user. */ if (isset($_GET['rid']) && !isset($_COOKIE['frm_referer_id']) && $GLOBALS['FUD_OPT_2'] & 8192) { setcookie($GLOBALS['COOKIE_NAME'] .'_referer_id', $_GET['rid'], __request_timestamp__+31536000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } if ($GLOBALS['FUD_OPT_3'] & 1) { // SESSION_COOKIES setcookie($GLOBALS['COOKIE_NAME'], $ses_id, 0, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } else { setcookie($GLOBALS['COOKIE_NAME'], $ses_id, __request_timestamp__+$GLOBALS['COOKIE_TIMEOUT'], $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); } return ses_get($id); } /** Update session status to indicate last known action. */ function ses_update_status($ses_id, $action=null, $forum_id=0, $ret='') { if (empty($ses_id)) { die('FATAL ERROR: No session, check your forum\'s URL and COOKIE settings.'); } if (strlen($_SERVER['QUERY_STRING']) > 255) { // Query string exceeds 'returnto' column length. die('FATAL ERROR: QUERY_STRING too long!'); } $sys_id = ses_make_sysid(); q('UPDATE fud30_ses SET sys_id=\''. $sys_id .'\', forum_id='. $forum_id .', time_sec='. __request_timestamp__ .', action='. ($action ? _esc($action) : 'NULL') .', returnto='. (!is_int($ret) ? (isset($_SERVER['QUERY_STRING']) ? _esc($_SERVER['QUERY_STRING']) : 'NULL') : 'returnto') .' WHERE id='. $ses_id); } /** Save or clear a session variable. */ function ses_putvar($ses_id, $data) { $cond = is_int($ses_id) ? 'id='. (int)$ses_id : 'ses_id=\''. $ses_id .'\''; if (empty($data)) { q('UPDATE fud30_ses SET data=NULL WHERE '. $cond); } else { q('UPDATE fud30_ses SET data='. _esc(serialize($data)) .' WHERE '. $cond); } } /** Destroy a session. */ function ses_delete($ses_id) { // Delete all forum sessions. // Regardless of MULTI_HOST_LOGIN, all sessions will be terminated. q('DELETE FROM fud30_ses WHERE id='. $ses_id); setcookie($GLOBALS['COOKIE_NAME'], '', __request_timestamp__-100000, $GLOBALS['COOKIE_PATH'], $GLOBALS['COOKIE_DOMAIN']); return 1; } function ses_anonuser_auth($id, $error) { if (!empty($_POST)) { $_SERVER['QUERY_STRING'] = ''; } q('UPDATE fud30_ses SET data='. _esc(serialize($error)) .', returnto='. ssn($_SERVER['QUERY_STRING']) .' WHERE id='. $id); if ($GLOBALS['FUD_OPT_2'] & 32768) { // USE_PATH_INFO header('Location: [[relativeurl]]/index.php/l/'. _rsidl); } else { header('Location: [[relativeurl]]/index.php?t=login&'. _rsidl); } exit; } ?> PK!gсс imsg_edt.incnu[reply_to = $reply_to; $fd = db_saq('SELECT t.forum_id, f.message_threshold, f.forum_opt FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON f.id=t.forum_id WHERE m.id='. $reply_to); } else { $fd = db_saq('SELECT t.forum_id, f.message_threshold, f.forum_opt FROM fud30_thread t INNER JOIN fud30_forum f ON f.id=t.forum_id WHERE t.id='. $th_id); } return $this->add($fd[0], $fd[1], $fd[2], $perm, $autoapprove); } function add($forum_id, $message_threshold, $forum_opt, $perm, $autoapprove=1, $msg_tdescr='') { if (!$this->post_stamp) { $this->post_stamp = __request_timestamp__; } if (!isset($this->ip_addr)) { $this->ip_addr = get_ip(); } $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; $this->thread_id = isset($this->thread_id) ? $this->thread_id : 0; $this->reply_to = isset($this->reply_to) ? $this->reply_to : 0; $this->subject = substr($this->subject, 0, 255); // Subject col is VARCHAR(255). if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = $file_id_preview = $length_preview = 0; $offset = $offset_preview = -1; $length = strlen($this->body); } else { $file_id = write_body($this->body, $length, $offset, $forum_id); /* Determine if preview needs building. */ if ($message_threshold && $message_threshold < strlen($this->body)) { $thres_body = trim_html($this->body, $message_threshold); $file_id_preview = write_body($thres_body, $length_preview, $offset_preview, $forum_id); } else { $file_id_preview = $offset_preview = $length_preview = 0; } } /* Lookup country and flag. */ if ($GLOBALS['FUD_OPT_3'] & 524288) { // ENABLE_GEO_LOCATION. $flag = db_saq('SELECT cc, country FROM fud30_geoip WHERE '. sprintf('%u', ip2long($this->ip_addr)) .' BETWEEN ips AND ipe'); } if (empty($flag)) { $flag = array(null, null); } $this->id = db_qid('INSERT INTO fud30_msg ( thread_id, poster_id, reply_to, ip_addr, host_name, post_stamp, subject, attach_cnt, poll_id, icon, msg_opt, file_id, foff, length, file_id_preview, offset_preview, length_preview, mlist_msg_id, poll_cache, flag_cc, flag_country ) VALUES( '. $this->thread_id .', '. $this->poster_id .', '. (int)$this->reply_to .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->subject) .', '. (int)$this->attach_cnt .', '. (int)$this->poll_id .', '. ssn($this->icon) .', '. $this->msg_opt .', '. $file_id .', '. (int)$offset .', '. (int)$length .', '. $file_id_preview .', '. $offset_preview .', '. $length_preview .', '. ssn($this->mlist_msg_id) .', '. ssn(poll_cache_rebuild($this->poll_id)) .', '. ssn($flag[0]) .', '. ssn($flag[1]) .' )'); if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); if ($message_threshold && $length > $message_threshold) { $file_id_preview = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc(trim_html($this->body, $message_threshold)) .')'); } q('UPDATE fud30_msg SET file_id='. $file_id .', file_id_preview='. $file_id_preview .' WHERE id='. $this->id); } $thread_opt = (int) ($perm & 4096 && isset($_POST['thr_locked'])); if (!$this->thread_id) { /* New thread. */ if ($perm & 64) { if (isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) && (int)$_POST['thr_ordertype']) { $thread_opt |= (int)$_POST['thr_ordertype']; $thr_orderexpiry = (int)$_POST['thr_orderexpiry']; } if (!empty($_POST['thr_always_on_top'])) { $thread_opt |= 8; } } $this->thread_id = th_add($this->id, $forum_id, $this->post_stamp, $thread_opt, (isset($thr_orderexpiry) ? $thr_orderexpiry : 0), 0, 0, 0, $msg_tdescr); q('UPDATE fud30_msg SET thread_id='. $this->thread_id .' WHERE id='. $this->id); } else { th_lock($this->thread_id, $thread_opt & 1); } if ($autoapprove && $forum_opt & 2) { $this->approve($this->id); } return $this->id; } function sync($id, $frm_id, $message_threshold, $perm, $msg_tdescr='') { $this->subject = substr($this->subject, 0, 255); // Subject col is VARCHAR(255). if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = $file_id_preview = $length_preview = 0; $offset = $offset_preview = -1; $length = strlen($this->body); } else { $file_id = write_body($this->body, $length, $offset, $frm_id); /* Determine if preview needs building. */ if ($message_threshold && $message_threshold < strlen($this->body)) { $thres_body = trim_html($this->body, $message_threshold); $file_id_preview = write_body($thres_body, $length_preview, $offset_preview, $frm_id); } else { $file_id_preview = $offset_preview = $length_preview = 0; } } q('UPDATE fud30_msg SET file_id='. $file_id .', foff='. (int)$offset .', length='. (int)$length .', mlist_msg_id='. ssn($this->mlist_msg_id) .', file_id_preview='. $file_id_preview .', offset_preview='. $offset_preview .', length_preview='. $length_preview .', updated_by='. $id .', msg_opt='. $this->msg_opt .', attach_cnt='. (int)$this->attach_cnt .', poll_id='. (int)$this->poll_id .', update_stamp='. __request_timestamp__ .', icon='. ssn($this->icon) .' , poll_cache='. ssn(poll_cache_rebuild($this->poll_id)) .', subject='. ssn($this->subject) .' WHERE id='. $this->id); if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE //TODO: Why DELETE? Can't we just UPDATE the DB? q('DELETE FROM fud30_msg_store WHERE id IN('. $this->file_id .','. $this->file_id_preview .')'); $file_id = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); if ($message_threshold && $length > $message_threshold) { $file_id_preview = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc(trim_html($this->body, $message_threshold)) .')'); } q('UPDATE fud30_msg SET file_id='. $file_id .', file_id_preview='. $file_id_preview .' WHERE id='. $this->id); } /* Determine wether or not we should deal with locked & sticky stuff * current approach may seem a little redundant, but for (most) users who * do not have access to locking & sticky this eliminated a query. */ $th_data = db_saq('SELECT orderexpiry, thread_opt, root_msg_id, tdescr FROM fud30_thread WHERE id='. $this->thread_id); $locked = (int) isset($_POST['thr_locked']); if (isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) || (($th_data[1] ^ $locked) & 1)) { $thread_opt = (int) $th_data[1]; $orderexpiry = isset($_POST['thr_orderexpiry']) ? (int) $_POST['thr_orderexpiry'] : 0; /* Confirm that user has ability to change lock status of the thread. */ if ($perm & 4096) { if ($locked && !($thread_opt & $locked)) { $thread_opt |= 1; } else if (!$locked && $thread_opt & 1) { $thread_opt &= ~1; } } /* Confirm that user has ability to change sticky status of the thread. */ if ($th_data[2] == $this->id && isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) && $perm & 64) { if (!$_POST['thr_ordertype'] && $thread_opt > 1) { $orderexpiry = 0; $thread_opt &= ~6; } else if ($thread_opt < 2 && (int) $_POST['thr_ordertype']) { $thread_opt |= $_POST['thr_ordertype']; } else if (!($thread_opt & (int) $_POST['thr_ordertype'])) { $thread_opt = $_POST['thr_ordertype'] | ($thread_opt & 1); } } if ($perm & 64) { if (!empty($_POST['thr_always_on_top'])) { $thread_opt |= 8; } else { $thread_opt &= ~8; } } /* Determine if any work needs to be done. */ if ($thread_opt != $th_data[1] || $orderexpiry != $th_data[0]) { q('UPDATE fud30_thread SET '. ($th_data[2] == $this->id ? 'tdescr='. _esc($msg_tdescr) .',' : '') .' thread_opt='.$thread_opt.', orderexpiry='. $orderexpiry .' WHERE id='. $this->thread_id); /* Avoid rebuilding the forum view whenever possible, since it's a rather slow process. * Only rebuild if expiry time has changed or message gained/lost sticky status. */ $diff = $thread_opt ^ $th_data[1]; if (($diff > 1 && $diff & 14) || $orderexpiry != $th_data[0]) { rebuild_forum_view_ttl($frm_id); } } else if ($msg_tdescr != $th_data[3] && $th_data[2] == $this->id) { q('UPDATE fud30_thread SET tdescr='. _esc($msg_tdescr) .' WHERE id='. $this->thread_id); } } else if ($msg_tdescr != $th_data[3] && $th_data[2] == $this->id) { q('UPDATE fud30_thread SET tdescr='. _esc($msg_tdescr) .' WHERE id='. $this->thread_id); } if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? If so, reindex message. q('DELETE FROM fud30_index WHERE msg_id='. $this->id); q('DELETE FROM fud30_title_index WHERE msg_id='. $this->id); index_text((!strncasecmp('Re: ', $this->subject, 4) ? '' : $this->subject), $this->body, $this->id); } } /** Delete a message & cleanup. */ static function delete($rebuild_view=1, $mid=0, $th_rm=0) { if (!$mid) { $mid = $this->id; } if (!($del = db_sab('SELECT m.file_id, m.file_id_preview, m.id, m.attach_cnt, m.poll_id, m.thread_id, m.reply_to, m.apr, m.poster_id, t.replies, t.root_msg_id AS root_msg_id, t.last_post_id AS thread_lip, t.forum_id, f.last_post_id AS forum_lip FROM fud30_msg m LEFT JOIN fud30_thread t ON m.thread_id=t.id LEFT JOIN fud30_forum f ON t.forum_id=f.id WHERE m.id='. $mid))) { return; } if (!db_locked()) { db_lock('fud30_msg_store WRITE, fud30_forum f WRITE, fud30_thr_exchange WRITE, fud30_tv_'. $del->forum_id .' WRITE, fud30_tv_'. $del->forum_id .' tv WRITE, fud30_msg m WRITE, fud30_thread t WRITE, fud30_level WRITE, fud30_forum WRITE, fud30_forum_read WRITE, fud30_thread WRITE, fud30_msg WRITE, fud30_attach WRITE, fud30_poll WRITE, fud30_poll_opt WRITE, fud30_poll_opt_track WRITE, fud30_users WRITE, fud30_thread_notify WRITE, fud30_bookmarks WRITE, fud30_msg_report WRITE, fud30_thread_rate_track WRITE, fud30_index WRITE, fud30_title_index WRITE, fud30_search_cache WRITE'); $ll = 1; } q('DELETE FROM fud30_msg WHERE id='. $mid); /* Remove attachments. */ if ($del->attach_cnt) { $res = q('SELECT location FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=0'); while ($loc = db_rowarr($res)) { @unlink($loc[0]); } unset($res); q('DELETE FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=0'); } /* Remove message reports. */ q('DELETE FROM fud30_msg_report WHERE msg_id='. $mid); /* Cleanup index entries. */ if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? q('DELETE FROM fud30_index WHERE msg_id='. $mid); q('DELETE FROM fud30_title_index WHERE msg_id='. $mid); q('DELETE FROM fud30_search_cache WHERE msg_id='. $mid); } /* Remove poll. */ if ($del->poll_id) { poll_delete($del->poll_id); } /* Check if thread. */ if ($del->root_msg_id == $del->id) { $th_rm = 1; /* Delete all messages in the thread if there is more than 1 message. */ if ($del->replies) { $rmsg = q('SELECT id FROM fud30_msg WHERE thread_id='. $del->thread_id .' AND id != '. $del->id); while ($dim = db_rowarr($rmsg)) { fud_msg_edit::delete(0, $dim[0], 1); } unset($rmsg); } q('DELETE FROM fud30_thread_notify WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_bookmarks WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_thread WHERE id='. $del->thread_id); q('DELETE FROM fud30_thread_rate_track WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_thr_exchange WHERE th='. $del->thread_id); if ($del->apr) { /* We need to determine the last post id for the forum, it can be null. */ $lpi = (int) q_singleval(q_limit('SELECT t.last_post_id FROM fud30_thread t INNER JOIN fud30_msg m ON t.last_post_id=m.id AND m.apr=1 WHERE t.forum_id='.$del->forum_id.' AND t.moved_to=0 ORDER BY m.post_stamp DESC', 1)); q('UPDATE fud30_forum SET last_post_id='. $lpi .', thread_count=thread_count-1, post_count=post_count-'. $del->replies .'-1 WHERE id='. $del->forum_id); } } else if (!$th_rm && $del->apr) { q('UPDATE fud30_msg SET reply_to='. $del->reply_to .' WHERE thread_id='. $del->thread_id .' AND reply_to='. $mid); /* Check if the message is the last in thread. */ if ($del->thread_lip == $del->id) { list($lpi, $lpd) = db_saq(q_limit('SELECT id, post_stamp FROM fud30_msg WHERE thread_id='. $del->thread_id .' AND apr=1 ORDER BY post_stamp DESC', 1)); q('UPDATE fud30_thread SET last_post_id='. $lpi .', last_post_date='. $lpd .', replies=replies-1 WHERE id='. $del->thread_id); } else { q('UPDATE fud30_thread SET replies=replies-1 WHERE id='. $del->thread_id); } /* Check if the message is the last in the forum. */ if ($del->forum_lip == $del->id) { $page = q_singleval('SELECT seq FROM fud30_tv_'. $del->forum_id .' WHERE thread_id='. $del->thread_id); $lp = db_saq(q_limit('SELECT t.last_post_id, t.last_post_date FROM fud30_tv_'. $del->forum_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id WHERE tv.seq IN('. $page .','. ($page - 1) .') AND t.moved_to=0 ORDER BY t.last_post_date DESC', 1)); if (!isset($lpd) || $lp[1] > $lpd) { $lpi = $lp[0]; } q('UPDATE fud30_forum SET post_count=post_count-1, last_post_id='. $lpi .' WHERE id='. $del->forum_id); } else { q('UPDATE fud30_forum SET post_count=post_count-1 WHERE id='. $del->forum_id); } } if ($del->apr) { if ($del->poster_id) { user_set_post_count($del->poster_id); } if ($rebuild_view) { if ($th_rm) { th_delete_rebuild($del->forum_id, $del->thread_id); } else if ($del->thread_lip == $del->id) { rebuild_forum_view_ttl($del->forum_id); } } } if (isset($ll)) { db_unlock(); } if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE q('DELETE FROM fud30_msg_store WHERE id IN('. $del->file_id .','. $del->file_id_preview .')'); } if (!$del->apr || !$th_rm || ($del->root_msg_id != $del->id)) { return; } /* Needed for moved thread pointers. */ $r = q('SELECT forum_id, id FROM fud30_thread WHERE root_msg_id='. $del->root_msg_id); while (($res = db_rowarr($r))) { q('DELETE FROM fud30_thread WHERE id='. $res[1]); q('UPDATE fud30_forum SET thread_count=thread_count-1 WHERE id='. $res[0]); th_delete_rebuild($res[0], $res[1]); } unset($r); } static function approve($id) { /* Fetch info about the message, poll (if one exists), thread & forum. */ $mtf = db_sab('SELECT /* USE MASTER */ m.id, m.poster_id, m.apr, m.subject, m.foff, m.length, m.file_id, m.thread_id, m.poll_id, m.attach_cnt, m.post_stamp, m.reply_to, m.mlist_msg_id, m.msg_opt, t.forum_id, t.last_post_id, t.root_msg_id, t.last_post_date, t.thread_opt, m2.post_stamp AS frm_last_post_date, f.name AS frm_name, f.forum_opt, u.alias, u.email, u.sig, u.name as real_name, n.id AS nntp_id, ml.id AS mlist_id FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON t.forum_id=f.id LEFT JOIN fud30_msg m2 ON f.last_post_id=m2.id LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_mlist ml ON ml.forum_id=f.id AND '. q_bitand('ml.mlist_opt', 2) .' > 0 LEFT JOIN fud30_nntp n ON n.forum_id=f.id AND '. q_bitand('n.nntp_opt', 2) .' > 0 WHERE m.id='. $id .' AND m.apr=0'); /* Nothing to do or bad message id. */ if (!$mtf) { return; } if ($mtf->alias) { $mtf->alias = reverse_fmt($mtf->alias); } else { $mtf->alias = $GLOBALS['ANON_NICK']; } q('UPDATE fud30_msg SET apr=1 WHERE id='.$mtf->id); if ($mtf->poster_id) { user_set_post_count($mtf->poster_id); } if ($mtf->post_stamp > $mtf->frm_last_post_date) { $mtf->last_post_id = $mtf->id; } if ($mtf->root_msg_id == $mtf->id) { /* New thread. */ th_new_rebuild($mtf->forum_id, $mtf->thread_id, $mtf->thread_opt & (2|4|8)); $threads = 1; } else { /* Reply to thread. */ if ($mtf->post_stamp > $mtf->last_post_date) { th_inc_post_count($mtf->thread_id, 1, $mtf->id, $mtf->post_stamp); } else { th_inc_post_count($mtf->thread_id, 1); } th_reply_rebuild($mtf->forum_id, $mtf->thread_id, $mtf->thread_opt & (2|4|8)); $threads = 0; } /* Update forum thread & post count as well as last_post_id field. */ q('UPDATE fud30_forum SET post_count=post_count+1, thread_count=thread_count+'. $threads .', last_post_id='. $mtf->last_post_id .' WHERE id='. $mtf->forum_id); if ($mtf->poll_id) { poll_activate($mtf->poll_id, $mtf->forum_id); } $mtf->body = read_msg_body($mtf->foff, $mtf->length, $mtf->file_id); if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? index_text((strncasecmp($mtf->subject, 'Re: ', 4) ? $mtf->subject : ''), $mtf->body, $mtf->id); } /* Handle notifications. */ if (!($GLOBALS['FUD_OPT_3'] & 1048576)) { // not DISABLE_NOTIFICATION_EMAIL if ($mtf->root_msg_id == $mtf->id || $GLOBALS['FUD_OPT_3'] & 16384) { // FORUM_NOTIFY_ALL if (empty($mtf->frm_last_post_date)) { $mtf->frm_last_post_date = 0; } /* Send new thread notifications to forum subscribers. */ $to = db_all('SELECT u.email FROM fud30_forum_notify fn INNER JOIN fud30_users u ON fn.user_id=u.id AND '. q_bitand('u.users_opt', 134217728) .' = 0 INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id='. $mtf->forum_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' LEFT JOIN fud30_forum_read r ON r.forum_id=fn.forum_id AND r.user_id=fn.user_id ' : ''). ' LEFT JOIN fud30_group_cache g2 ON g2.user_id=fn.user_id AND g2.resource_id='. $mtf->forum_id . ' LEFT JOIN fud30_mod mm ON mm.forum_id='. $mtf->forum_id .' AND mm.user_id=u.id WHERE fn.forum_id='. $mtf->forum_id .' AND fn.user_id!='. (int)$mtf->poster_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' AND (CASE WHEN (r.last_view IS NULL AND (u.last_read=0 OR u.last_read >= '. $mtf->frm_last_post_date .')) OR r.last_view > '. $mtf->frm_last_post_date .' THEN 1 ELSE 0 END)=1 ' : ''). ' AND ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0 OR '. q_bitand('u.users_opt', 1048576) .' > 0 OR mm.id IS NOT NULL)'. ' AND '. q_bitand('u.users_opt', 65536) .' = 0'); if ($GLOBALS['FUD_OPT_3'] & 16384) { $notify_type = 'thr'; } else { $notify_type = 'frm'; } } else { $to = array(); } if ($mtf->root_msg_id != $mtf->id) { /* Send new reply notifications to thread subscribers. */ $tmp = db_all('SELECT u.email FROM fud30_thread_notify tn INNER JOIN fud30_users u ON tn.user_id=u.id AND '. q_bitand('u.users_opt', 134217728) .' = 0 INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id='. $mtf->forum_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' LEFT JOIN fud30_read r ON r.thread_id=tn.thread_id AND r.user_id=tn.user_id ' : ''). ' LEFT JOIN fud30_group_cache g2 ON g2.user_id=tn.user_id AND g2.resource_id='. $mtf->forum_id . ' LEFT JOIN fud30_mod mm ON mm.forum_id='. $mtf->forum_id .' AND mm.user_id=u.id WHERE tn.thread_id='. $mtf->thread_id .' AND tn.user_id!='. (int)$mtf->poster_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' AND (r.msg_id='. $mtf->last_post_id .' OR (r.msg_id IS NULL AND '. $mtf->post_stamp .' > u.last_read)) ' : ''). ' AND ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0 OR '. q_bitand('u.users_opt', 1048576) .' > 0 OR mm.id IS NOT NULL)'. ' AND '. q_bitand('u.users_opt', 65536) .' = 0'); $to = !$to ? $tmp : array_unique(array_merge($to, $tmp)); $notify_type = 'thr'; } if ($mtf->forum_opt & 64) { // always_notify_mods $tmp = db_all('SELECT u.email FROM fud30_mod mm INNER JOIN fud30_users u ON u.id=mm.user_id WHERE mm.forum_id='. $mtf->forum_id); $to = !$to ? $tmp : array_unique(array_merge($to, $tmp)); } if ($to) { send_notifications($to, $mtf->id, $mtf->subject, $mtf->alias, $notify_type, ($notify_type == 'thr' ? $mtf->thread_id : $mtf->forum_id), $mtf->frm_name, $mtf->forum_id); } } // Handle Mailing List and/or Newsgroup syncronization. if (($mtf->nntp_id || $mtf->mlist_id) && !$mtf->mlist_msg_id) { fud_use('email_msg_format.inc', 1); $from = $mtf->poster_id ? reverse_fmt($mtf->real_name) .' <'. $mtf->email .'>' : $GLOBALS['ANON_NICK'] .' <'. $GLOBALS['NOTIFY_FROM'] .'>'; $body = $mtf->body . (($mtf->msg_opt & 1 && $mtf->sig) ? "\n-- \n" . $mtf->sig : ''); $body = plain_text($body, '', '
    ', '
    '); $mtf->subject = reverse_fmt($mtf->subject); if ($mtf->reply_to) { // Get the parent message's Message-ID: if ( !($replyto_id = q_singleval('SELECT mlist_msg_id FROM fud30_msg WHERE id='. $mtf->reply_to))) { fud_logerror('WARNING: Send reply with no Message-ID. The import script is not running or may be lagging.', 'fud_errors'); } } else { $replyto_id = 0; } if ($mtf->attach_cnt) { $r = uq('SELECT a.id, a.original_name, COALESCE(m.mime_hdr, \'application/octet-stream\') FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.message_id='. $mtf->id .' AND a.attach_opt=0'); while ($ent = db_rowarr($r)) { $attach[$ent[1]] = file_get_contents($GLOBALS['FILE_STORE'] . $ent[0] .'.atch'); $attach_mime[$ent[1]] = $ent[2]; } unset($r); } else { $attach_mime = $attach = null; } if ($mtf->nntp_id) { // Push out to usenet group. fud_use('nntp.inc', true); $nntp_adm = db_sab('SELECT * FROM fud30_nntp WHERE id='. $mtf->nntp_id); if (!empty($nntp_adm->custom_sig)) { // Add signature marker. $nntp_adm->custom_sig = "\n-- \n". $nntp_adm->custom_sig; } $nntp = new fud_nntp; $nntp->server = $nntp_adm->server; $nntp->newsgroup = $nntp_adm->newsgroup; $nntp->port = $nntp_adm->port; $nntp->timeout = $nntp_adm->timeout; $nntp->nntp_opt = $nntp_adm->nntp_opt; $nntp->user = $nntp_adm->login; $nntp->pass = $nntp_adm->pass; define('sql_p', 'fud30_'); $lock = $nntp->get_lock(); $nntp->post_message($mtf->subject, $body . $nntp_adm->custom_sig, $from, $mtf->id, $replyto_id, $attach, $attach_mime); $nntp->close_connection(); $nntp->release_lock($lock); } else { // Push out to mailing list. fud_use('mlist_post.inc', true); $r = db_saq('SELECT name, additional_headers, custom_sig, fixed_from_address FROM fud30_mlist WHERE id='. $mtf->mlist_id); // Add forum's signature to the messages. if (!empty($r[2])) { $body .= "\n-- \n". $r[2]; } if (!empty($r[3])) { // Use the forum's fixed "From:" address. mail_list_post($r[0], $r[3], $mtf->subject, $body, $mtf->id, $replyto_id, $attach, $attach_mime, $r[1]); } else { // Use poster's e-mail as the "From" address. mail_list_post($r[0], $from, $mtf->subject, $body, $mtf->id, $replyto_id, $attach, $attach_mime, $r[1]); } } } // Message Approved plugins. if (defined('plugins')) { plugin_call_hook('POST_APPROVE', $mtf); } } } function write_body($data, &$len, &$offset, $fid) { $MAX_FILE_SIZE = 2140000000; $len = strlen($data); $i = 1; db_lock('fud30_fl_'. $fid .' WRITE'); $s = $fid * 10000; $e = $s + 100; while ($s < $e) { $fp = fopen($GLOBALS['MSG_STORE_DIR'] .'msg_'. $s, 'ab'); if (!$fp) { exit('FATAL ERROR: could not open message store for forum id#'. $s ."
    \n"); } fseek($fp, 0, SEEK_END); if (!($off = ftell($fp))) { $off = __ffilesize($fp); } if (!$off || ($off + $len) < $MAX_FILE_SIZE) { break; } fclose($fp); $s++; } if (fwrite($fp, $data) !== $len) { if ($fid) { db_unlock(); } exit("FATAL ERROR: system has ran out of disk space.
    \n"); } fclose($fp); db_unlock(); if (!$off) { @chmod('msg_'. $s, ($GLOBALS['FUD_OPT_2'] & 8388608 ? 0600 : 0644)); } $offset = $off; return $s; } function trim_html($str, $maxlen) { $n = strlen($str); $ln = 0; $tree = array(); for ($i = 0; $i < $n; $i++) { if ($str[$i] != '<') { $ln++; if ($ln > $maxlen) { break; } continue; } if (($p = strpos($str, '>', $i)) === false) { break; } for ($k = $i; $k < $p; $k++) { switch ($str[$k]) { case ' ': case "\r": case "\n": case "\t": case '>': break 2; } } if ($str[$i+1] == '/') { $tagname = strtolower(substr($str, $i+2, $k-$i-2)); if (@end($tagindex[$tagname])) { $k = key($tagindex[$tagname]); unset($tagindex[$tagname][$k], $tree[$k]); } } else { $tagname = strtolower(substr($str, $i+1, $k-$i-1)); switch ($tagname) { case 'br': case 'img': case 'meta': break; default: $tree[] = $tagname; end($tree); $tagindex[$tagname][key($tree)] = 1; } } $i = $p; } $data = substr($str, 0, $i); if ($tree) { foreach (array_reverse($tree) as $v) { $data .= ''; } } return $data; } function make_email_message(&$body, &$obj, $iemail_unsub) { $TITLE_EXTRA = $iemail_poll = $iemail_attach = ''; if ($obj->poll_cache) { $pl = unserialize($obj->poll_cache); if (!empty($pl)) { foreach ($pl as $k => $v) { $length = ($v[1] && $obj->total_votes) ? round($v[1] / $obj->total_votes * 100) : 0; $iemail_poll .= ' '.$k.'. '.$v[0].' '.$v[1].' / '.$length.'% '; } $iemail_poll = ' '.$iemail_poll.'
    '.$obj->poll_name.' [ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]


    '; } } if ($obj->attach_cnt && $obj->attach_cache) { $atch = unserialize($obj->attach_cache); if (!empty($atch)) { foreach ($atch as $v) { $sz = $v[2] / 1024; $sz = $sz < 1000 ? number_format($sz, 2) .'KB' : number_format($sz/1024, 2) .'MB'; $iemail_attach .= ' Attachment: '.$v[1].'
    (Size: '.$sz.', Downloaded '.convertPlural($v[3], array(''.$v[3].' time',''.$v[3].' times')).') '; } $iemail_attach = '

    '.$iemail_attach.'
    '; } } if ($GLOBALS['FUD_OPT_2'] & 32768 && defined('_rsid')) { $pfx = str_repeat('/', substr_count(_rsid, '/')); } // Remove all JavaScript. Spam filters like SpamAssassin don't like them. return preg_replace('#]*>.*?#is', '', ' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.'
    Subject: '.$obj->subject.' Author: '.$obj->alias.' Date: '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'
    '.$iemail_poll.' '.$body.' '.$iemail_attach.'
    [ Reply ][ Quote ][ View Topic/Message ]'.$iemail_unsub.'
    '); } function poll_cache_rebuild($poll_id) { if (!$poll_id) { return; } $data = array(); $c = uq('SELECT id, name, votes FROM fud30_poll_opt WHERE poll_id='. $poll_id); while ($r = db_rowarr($c)) { $data[$r[0]] = array($r[1], $r[2]); } unset($c); if ($data) { return serialize($data); } else { return; } } function send_notifications($to, $msg_id, $thr_subject, $poster_login, $id_type, $id, $frm_name, $frm_id) { if (!$to) { return; } $goto_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&goto='. $msg_id .'#msg_'. $msg_id; $CHARSET = $GLOBALS['CHARSET']; if ($GLOBALS['FUD_OPT_2'] & 64) { // NOTIFY_WITH_BODY $munge_newlines = 0; $obj = db_sab('SELECT p.total_votes, p.name AS poll_name, m.reply_to, m.subject, m.id, m.post_stamp, m.poster_id, m.foff, m.length, m.file_id, u.alias, m.attach_cnt, m.attach_cache, m.poll_cache FROM fud30_msg m LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_poll p ON m.poll_id=p.id WHERE m.id='. $msg_id .' AND m.apr=1'); if (!$obj->alias) { /* anon user */ $obj->alias = htmlspecialchars($GLOBALS['ANON_NICK']); } $headers = "MIME-Version: 1.0\r\n"; if ($obj->reply_to) { $headers .= 'In-Reply-To: '. $obj->reply_to ."\r\n"; } $headers .= 'List-Id: '. $frm_id .'.'. (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost') ."\r\n"; $split = get_random_value(128); $headers .= "Content-Type: multipart/alternative;\n boundary=\"------------". $split ."\"\r\n"; $boundry = "\r\n--------------". $split ."\r\n"; $pfx = ''; if ($GLOBALS['FUD_OPT_2'] & 32768 && !empty($_SERVER['PATH_INFO'])) { if ($GLOBALS['FUD_OPT_1'] & 128) { $pfx .= '0/'; } if ($GLOBALS['FUD_OPT_2'] & 8192) { $pfx .= '0/'; } } $plain_text = read_msg_body($obj->foff, $obj->length, $obj->file_id); $iemail_unsub = html_entity_decode($id_type == 'thr' ? '[ Unsubscribe from this topic ]' : '[ Unsubscribe from this forum ]'); $body_email = $boundry .'Content-Type: text/plain; charset='. $CHARSET ."; format=flowed\r\nContent-Transfer-Encoding: 8bit\r\n\r\n" . html_entity_decode(strip_tags($plain_text)) . "\r\n\r\n" . html_entity_decode('To participate in the discussion, go here:') .' '. ''.$GLOBALS['WWW_ROOT'].'?t=rview&'. ($id_type == 'thr' ? 'th' : 'frm_id') .'='. $id ."\r\n". $boundry .'Content-Type: text/html; charset='. $CHARSET ."\r\nContent-Transfer-Encoding: 8bit\r\n\r\n". make_email_message($plain_text, $obj, $iemail_unsub) ."\r\n". substr($boundry, 0, -2) ."--\r\n"; } else { $munge_newlines = 1; $headers = ''; } $thr_subject = reverse_fmt($thr_subject); $poster_login = reverse_fmt($poster_login); if ($id_type == 'thr') { $subj = html_entity_decode('New reply to '.$thr_subject.' by '.$poster_login.''); if (!isset($body_email)) { $unsub_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&th='. $id .'¬ify=1&opt=off'; $body_email = html_entity_decode('To view unread replies go to '.$goto_url['email'].'\n\nIf you do not wish to receive further notifications about replies in this topic, please go here: '.$unsub_url['email'].''); } } else if ($id_type == 'frm') { $frm_name = reverse_fmt($frm_name); $subj = html_entity_decode('New topic in forum '.$frm_name.', called '.$thr_subject.', by '.$poster_login.''); if (!isset($body_email)) { $unsub_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&unsub=1&frm_id='. $id; $body_email = html_entity_decode('To view the topic go to:\n'.$goto_url['email'].'\n\nTo stop receiving notifications about new topics in this forum, please go here: '.$unsub_url['email'].''); } } send_email($GLOBALS['NOTIFY_FROM'], $to, $subj, $body_email, $headers, $munge_newlines); } ?> PK!Z+ FaFa drawmsg.incnu[buddy_list) { $usr->buddy_list = unserialize($usr->buddy_list); } if ($usr->ignore_list) { $usr->ignore_list = unserialize($usr->ignore_list); if (isset($usr->ignore_list[1])) { $usr->ignore_list[0] =& $usr->ignore_list[1]; } } /* Handle temporarily un-hidden users. */ if (isset($_GET['reveal'])) { $_GET['reveal'] = htmlspecialchars((string)$_GET['reveal']); foreach(explode(':', $_GET['reveal']) as $v) { $v = (int) $v; if (isset($usr->ignore_list[$v])) { $usr->ignore_list[$v] = 0; } } if ($GLOBALS['FUD_OPT_2'] & 32768) { define('unignore_tmp', '/'. $_GET['reveal']); } else { define('unignore_tmp', '&reveal='. $_GET['reveal']); } } else { define('unignore_tmp', ''); } } else { define('unignore_tmp', ''); if (isset($_GET['reveal'])) { unset($_GET['reveal']); } } $_SERVER['QUERY_STRING_ENC'] = htmlspecialchars($_SERVER['QUERY_STRING']); function make_tmp_unignore_lnk($id) { if ($GLOBALS['FUD_OPT_2'] & 32768 && strpos($_SERVER['QUERY_STRING_ENC'], '?') === false) { $_SERVER['QUERY_STRING_ENC'] .= '?1=1'; } if (!isset($_GET['reveal'])) { return $_SERVER['QUERY_STRING_ENC'] .'&reveal='. $id; } else { return str_replace('&reveal='. $_GET['reveal'], unignore_tmp .':'. $id, $_SERVER['QUERY_STRING_ENC']); } } function make_reveal_link($id) { if ($GLOBALS['FUD_OPT_2'] & 32768 && strpos($_SERVER['QUERY_STRING_ENC'], '?') === false) { $_SERVER['QUERY_STRING_ENC'] .= '?1=1'; } if (empty($GLOBALS['__FMDSP__'])) { return $_SERVER['QUERY_STRING_ENC'] .'&rev='. $id; } else { return str_replace('&rev='. $_GET['rev'], reveal_lnk .':'. $id, $_SERVER['QUERY_STRING_ENC']); } } /* Draws a message, needs a message object, user object, permissions array, * flag indicating wether or not to show controls and a variable indicating * the number of the current message (needed for cross message pager) * last argument can be anything, allowing forms to specify various vars they * need to. */ function tmpl_drawmsg($obj, $usr, $perms, $hide_controls, &$m_num, $misc) { $o1 =& $GLOBALS['FUD_OPT_1']; $o2 =& $GLOBALS['FUD_OPT_2']; $a = (int) $obj->users_opt; $b =& $usr->users_opt; $MOD =& $GLOBALS['MOD']; $next_page = $next_message = $prev_message = ''; /* Draw next/prev message controls. */ if (!$hide_controls && $misc) { /* Tree view is a special condition, we only show 1 message per page. */ if ($_GET['t'] == 'tree' || $_GET['t'] == 'tree_msg') { $prev_message = $misc[0] ? 'Go to previous message' : ''; $next_message = $misc[1] ? 'Go to previous message' : ''; } else { /* Handle previous link. */ if (!$m_num && $obj->id > $obj->root_msg_id) { /* prev link on different page */ $prev_message = 'Go to previous message'; } else if ($m_num) { /* Inline link, same page. */ $prev_message = 'Go to previous message'; } /* Handle next link. */ if ($obj->id < $obj->last_post_id) { if ($m_num && !($misc[1] - $m_num - 1)) { /* next page link */ $next_message = 'Go to previous message'; $next_page = 'Next Page '; } else { $next_message = 'Go to next message'; } } } ++$m_num; } $user_login = $obj->user_id ? $obj->login : $GLOBALS['ANON_NICK']; /* Check if the message should be ignored and it is not temporarily revelead. */ if ($usr->ignore_list && !empty($usr->ignore_list[$obj->poster_id]) && !isset($GLOBALS['__FMDSP__'][$obj->id])) { return !$hide_controls ? '
    '.($obj->user_id ? 'Message by '.$obj->login.' is ignored' : ''.$GLOBALS['ANON_NICK'].' is ignored' ) .'  [reveal message]  [reveal all messages by '.$user_login.']  [stop ignoring this user] '.$prev_message.$next_message.'
    ' : ' Post by '.$user_login.' is ignored  '; } if ($obj->user_id && !$hide_controls) { $custom_tag = $obj->custom_status ? '
    '.$obj->custom_status.'' : ''; $c = (int) $obj->level_opt; if ($obj->avatar_loc && $a & 8388608 && $b & 8192 && $o1 & 28 && !($c & 2)) { if (!($c & 1)) { $level_name =& $obj->level_name; $level_image = $obj->level_img ? ' ' : ''; } else { $level_name = $level_image = ''; } } else { $level_image = $obj->level_img ? ' ' : ''; $obj->avatar_loc = ''; $level_name =& $obj->level_name; } $avatar = ($obj->avatar_loc || $level_image) ? ''.$obj->avatar_loc.$level_image.'' : ''; $dmsg_tags = ($custom_tag || $level_name) ? '
    '.$level_name.$custom_tag.'
    ' : ''; if (($o2 & 32 && !($a & 32768)) || $b & 1048576) { $online_indicator = (($obj->time_sec + $GLOBALS['LOGEDIN_TIMEOUT'] * 60) > __request_timestamp__) ? ''.$obj->login.' is currently online ' : ''.$obj->login.' is currently offline '; } else { $online_indicator = ''; } $user_link = ''.$user_login.''; $location = $obj->location ? '
    Location: '.(strlen($obj->location) > $GLOBALS['MAX_LOCATION_SHOW'] ? substr($obj->location, 0, $GLOBALS['MAX_LOCATION_SHOW']) . '...' : $obj->location).'' : ''; if (_uid && _uid != $obj->user_id) { $buddy_link = !isset($usr->buddy_list[$obj->user_id]) ? 'add to buddy list
    ' : 'remove from buddy list
    '; $ignore_link = !isset($usr->ignore_list[$obj->user_id]) ? 'ignore all messages by this user' : 'stop ignoring messages by this user'; $dmsg_bd_il = ''.$buddy_link.$ignore_link.'
    '; } else { $dmsg_bd_il = ''; } /* Show im buttons if need be. */ if ($b & 16384) { $im = ''; if ($obj->icq) { $im .= ''; } if ($obj->facebook) { $im .= ''; } if ($obj->yahoo) { $im .= ''; } if ($obj->jabber) { $im .= ''; } if ($obj->google) { $im .= ''; } if ($obj->skype) { $im .= ''; } if ($obj->twitter) { $im .= ''; } if ($im) { $dmsg_im_row = ''.$im.'
    '; } else { $dmsg_im_row = ''; } } else { $dmsg_im_row = ''; } } else { $user_link = $obj->user_id ? ''.$user_login.'' : ''.$user_login; $dmsg_tags = $dmsg_im_row = $dmsg_bd_il = $location = $online_indicator = $avatar = ''; } /* Display message body. * If we have message threshold & the entirity of the post has been revelead show a * preview otherwise if the message body exists show an actual body. * If there is no body show a 'no-body' message. */ if (!$hide_controls && $obj->message_threshold && $obj->length_preview && $obj->length > $obj->message_threshold && !isset($GLOBALS['__FMDSP__'][$obj->id])) { $msg_body = ''.read_msg_body($obj->offset_preview, $obj->length_preview, $obj->file_id_preview).' ...

    [ Show the rest of the message ]
    '; } else if ($obj->length) { $msg_body = ''.read_msg_body($obj->foff, $obj->length, $obj->file_id).''; } else { $msg_body = 'No Message Body'; } /* Draw file attachments if there are any. */ $drawmsg_file_attachments = ''; if ($obj->attach_cnt && !empty($obj->attach_cache)) { $atch = unserialize($obj->attach_cache); if (!empty($atch)) { foreach ($atch as $v) { $sz = $v[2] / 1024; $drawmsg_file_attachments .= '
  • Attachment: '.$v[1].'
    (Size: '.($sz < 1000 ? number_format($sz, 2).'KB' : number_format($sz/1024, 2).'MB').', Downloaded '.convertPlural($v[3], array(''.$v[3].' time',''.$v[3].' times')).')
  • '; } $drawmsg_file_attachments = ''; } /* Append session to getfile. */ if (_uid) { if ($o1 & 128 && !isset($_COOKIE[$GLOBALS['COOKIE_NAME']])) { $msg_body = str_replace('poll_cache) { $obj->poll_cache = unserialize($obj->poll_cache); } /* Handle poll votes. */ if (!empty($_POST['poll_opt']) && ($_POST['poll_opt'] = (int)$_POST['poll_opt']) && !($obj->thread_opt & 1) && $perms & 512) { if (register_vote($obj->poll_cache, $obj->poll_id, $_POST['poll_opt'], $obj->id)) { $obj->total_votes += 1; $obj->cant_vote = 1; } unset($_GET['poll_opt']); } /* Display poll if there is one. */ if ($obj->poll_id && $obj->poll_cache) { /* We need to determine if we allow the user to vote or see poll results. */ $show_res = 1; if (isset($_GET['pl_view']) && !isset($_POST['pl_view'])) { $_POST['pl_view'] = $_GET['pl_view']; } /* Various conditions that may prevent poll voting. */ if (!$hide_controls && !$obj->cant_vote && (!isset($_POST['pl_view']) || $_POST['pl_view'] != $obj->poll_id) && ($perms & 512 && (!($obj->thread_opt & 1) || $perms & 4096)) && (!$obj->expiry_date || ($obj->creation_date + $obj->expiry_date) > __request_timestamp__) && /* Check if the max # of poll votes was reached. */ (!$obj->max_votes || $obj->total_votes < $obj->max_votes) ) { $show_res = 0; } $i = 0; $poll_data = ''; foreach ($obj->poll_cache as $k => $v) { ++$i; if ($show_res) { $length = ($v[1] && $obj->total_votes) ? round($v[1] / $obj->total_votes * 100) : 0; $poll_data .= ' '.$i.'. '.$v[0].' '.$v[1].' / '.$length.'% '; } else { $poll_data .= ' '.$i.'. '; } } if (!$show_res) { $poll = '
    '._hs.' '.$poll_data.'
    '.$obj->poll_name.'[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]
     '.($obj->total_votes ? '' : '' ) .'

    '; } else { $poll = '
    '.$poll_data.'
    '.$obj->poll_name.'[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]

    '; } if (($p = strpos($msg_body, '{POLL}')) !== false) { $msg_body = substr_replace($msg_body, $poll, $p, 6); } else { $msg_body = $poll . $msg_body; } } /* Determine if the message was updated and if this needs to be shown. */ if ($obj->update_stamp) { if ($obj->updated_by != $obj->poster_id && $o1 & 67108864) { $modified_message = '

    [Updated on: '.print_date('%a, %d %B %Y %H:%M', $obj->update_stamp).'] by Moderator

    '; } else if ($obj->updated_by == $obj->poster_id && $o1 & 33554432) { $modified_message = '

    [Updated on: '.print_date('%a, %d %B %Y %H:%M', $obj->update_stamp).']

    '; } else { $modified_message = ''; } } else { $modified_message = ''; } if ($_GET['t'] != 'tree' && $_GET['t'] != 'msg') { $lnk = d_thread_view; } else { $lnk =& $_GET['t']; } $rpl = ''; if (!$hide_controls) { /* Show reply links, eg: [message #1 is a reply to message #2]. */ if ($o2 & 536870912) { if ($obj->reply_to && $obj->reply_to != $obj->id) { $rpl = '[message #'.$obj->id.' is a reply to message #'.$obj->reply_to.']'; } else { $rpl = '[message #'.$obj->id.']'; } } /* Little trick, this variable will only be available if we have a next link leading to another page. */ if (empty($next_page)) { $next_page = ' '; } // Edit button if editing is enabled, EDIT_TIME_LIMIT has not transpired, and there are no replies. if (_uid && ($perms & 16 || (_uid == $obj->poster_id && (!$GLOBALS['EDIT_TIME_LIMIT'] || __request_timestamp__ - $obj->post_stamp < $GLOBALS['EDIT_TIME_LIMIT'] * 60 ) && (($GLOBALS['FUD_OPT_3'] & 1024) || $obj->id == $obj->last_post_id)) ) ) { $edit_link = '    '; } else { $edit_link = ''; } if (!($obj->thread_opt & 1) || $perms & 4096) { $reply_link = ' '; $quote_link = ''; } else { $reply_link = $quote_link = ''; } } return ' '.(!$hide_controls ? '' : '' ) .'
    '.($obj->icon && !$hide_controls ? ''.$obj->icon.'  ' : '' ) .''.$obj->subject.' '.$rpl.' '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).' '.$prev_message.$next_message.'
    '.$avatar.'
    '.$online_indicator.' '.$user_link.' '.(!$hide_controls ? ''.($obj->disp_flag_cc && $GLOBALS['FUD_OPT_3'] & 524288 ? '  '.$obj->flag_country.'' : '' ) .($obj->user_id ? '
    Messages: '.$obj->posted_msg_count.'
    Registered: '.print_date('%B %Y', $obj->join_date).' '.$location.'' : '' ) .'' : '' ) .' '.($GLOBALS['FUD_OPT_4'] & 4 && $obj->poster_id > 0 ? '
    '.($MOD ? '' : '' ) .' Karma: '.$obj->karma.' '.($MOD ? '' : '' ) .' ' : '' ) .'
    '.$dmsg_tags.' '.$dmsg_bd_il.$dmsg_im_row.(!$hide_controls ? ''.(($obj->host_name && $o1 & 268435456) ? 'From: '.$obj->host_name.'
    ' : '' ) .(($b & 1048576 || $usr->md || $o1 & 134217728) ? 'IP: '.$obj->ip_addr.'' : '' ) .'' : '' ) .'
    '.$msg_body.' '.$drawmsg_file_attachments.' '.(!$hide_controls ? ''.(($obj->sig && $o1 & 32768 && $obj->msg_opt & 1 && $b & 4096 && !($a & 67108864)) ? '

    '.$obj->sig.'
    ' : '' ) .'
    '.$modified_message.'

    Report message to a moderator

    ' : '' ) .'
    '; } ?> PK!PP  draw_forum_path.incnu['.$cat_cache[$cid][1].''. $data; } while (($cid = $cat_par[$cid]) > 0); if ($fid) { $data .= ' » '.$fn.''; } else if ($fn) { $data .= ' » '.$fn.''; } return 'Home'.$data.($tn ? ' » '.$tn.'' : ''); } ?>PK!Wu forumsel.incnu[ 0 ' : ' WHERE '. q_bitand('g1.group_cache_opt', 1) .' > 0 AND f.url_redirect IS NULL '). 'ORDER BY v.id'); } $f = array($frm_id => 1); $frmcount = 0; $oldc = $selection_options = ''; while ($r = db_rowarr($c)) { if ($oldc != $r[2]) { foreach ($GLOBALS['cat_cache'] as $k => $i) { if ($r[2] != $k && $i[0] >= $GLOBALS['cat_cache'][$r[2]][0]) { continue; } $selection_options .= ''; if ($k == $r[2]) { break; } } $oldc = $r[2]; } $selection_options .= ''; $frmcount++; } unset($c); return ''.($frmcount > 1 ? ' Goto Forum:
    '._hs.'   
    ' : '' ) ; } ?> PK!%i admincp.incnu[users_opt & 524288 || $is_a) { // is_mod or admin. if ($is_a) { // Approval of custom Avatars. if ($FUD_OPT_1 & 32 && ($avatar_count = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=16777216 AND '. q_bitand('users_opt', 16777216) .' > 0'))) { $custom_avatar_queue = '| Custom Avatar Queue ('.$avatar_count.')'; } // All reported messages. if ($report_count = q_singleval('SELECT count(*) FROM fud30_msg_report')) { $reported_msgs = '| Reported Messages ('.$report_count.')'; } // All thread exchange requests. if ($thr_exchc = q_singleval('SELECT count(*) FROM fud30_thr_exchange')) { $thr_exch = '| Topic Exchange ('.$thr_exchc.')'; } // All account approvals. if ($FUD_OPT_2 & 1024 && ($accounts_pending_approval = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=2097152 AND '. q_bitand('users_opt', 2097152) .' > 0 AND id > 0'))) { $accounts_pending_approval = '| Accounts Pending Approval ('.$accounts_pending_approval.')'; } else { $accounts_pending_approval = ''; } $q_limit = ''; } else { // Messages reported in moderated forums. if ($report_count = q_singleval('SELECT count(*) FROM fud30_msg_report mr INNER JOIN fud30_msg m ON mr.msg_id=m.id INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_mod mm ON t.forum_id=mm.forum_id AND mm.user_id='. _uid)) { $reported_msgs = '| Reported Messages ('.$report_count.')'; } // Thread move requests in moderated forums. if ($thr_exchc = q_singleval('SELECT count(*) FROM fud30_thr_exchange te INNER JOIN fud30_mod m ON m.user_id='. _uid .' AND te.frm=m.forum_id')) { $thr_exch = '| Topic Exchange ('.$thr_exchc.')'; } $q_limit = ' INNER JOIN fud30_mod mm ON f.id=mm.forum_id AND mm.user_id='. _uid; } // Messages requiring approval. if ($approve_count = q_singleval('SELECT count(*) FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON t.forum_id=f.id '. $q_limit .' WHERE m.apr=0 AND f.forum_opt>=2')) { $mod_que = 'Moderation Queue ('.$approve_count.')'; } } else if ($usr->users_opt & 268435456 && $FUD_OPT_2 & 1024 && ($accounts_pending_approval = q_singleval('SELECT count(*) FROM fud30_users WHERE users_opt>=2097152 AND '. q_bitand('users_opt', 2097152) .' > 0 AND id > 0'))) { $accounts_pending_approval = '| Accounts Pending Approval ('.$accounts_pending_approval.')'; } else { $accounts_pending_approval = ''; } if ($is_a || $usr->group_leader_list) { $group_mgr = '| Group Manager'; } if ($thr_exch || $accounts_pending_approval || $group_mgr || $reported_msgs || $custom_avatar_queue || $mod_que) { $admin_cp = '
    Admin: '.$mod_que.' '.$reported_msgs.' '.$thr_exch.' '.$custom_avatar_queue.' '.$group_mgr.' '.$accounts_pending_approval.'
    '; } } else { $admin_cp = ''; } ?> PK!xϜ logedin.incnu[last_user_id, $obj->user_count) = db_saq('SELECT MAX(id), count(*)-1 FROM fud30_users'); $obj->online_users_anon = q_singleval('SELECT count(*) FROM fud30_ses s WHERE time_sec>'. $tm_expire .' AND user_id>2000000000'); $obj->online_users_hidden = q_singleval('SELECT count(*) FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'>0'); $obj->online_users_reg = q_singleval('SELECT count(*) FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'=0'); $c = uq(q_limit('SELECT u.id, u.alias, u.users_opt, u.custom_color FROM fud30_ses s INNER JOIN fud30_users u ON u.id=s.user_id WHERE s.time_sec>'. $tm_expire .' AND '. q_bitand('u.users_opt', 32768) .'=0 ORDER BY s.time_sec DESC', $GLOBALS['MAX_LOGGEDIN_USERS'])); $obj->online_users_text = array(); while ($r = db_rowarr($c)) { $obj->online_users_text[$r[0]] = draw_user_link($r[1], $r[2], $r[3]); } unset($c); q('UPDATE fud30_stats_cache SET cache_age='. __request_timestamp__ .', last_user_id='. (int)$obj->last_user_id .', user_count='. (int)$obj->user_count .', online_users_anon='. (int)$obj->online_users_anon .', online_users_hidden='. (int)$obj->online_users_hidden .', online_users_reg='. (int)$obj->online_users_reg .', online_users_text='. ssn(serialize($obj->online_users_text))); $obj->last_user_alias = q_singleval('SELECT alias FROM fud30_users WHERE id='. $obj->last_user_id); $obj->last_msg_subject = q_singleval('SELECT subject FROM fud30_msg WHERE id='. $last_msg_id); list($obj->most_online,$obj->most_online_time) = db_saq('SELECT most_online, most_online_time FROM fud30_stats_cache'); /* Update most online users stats if needed. */ if (($obj->online_users_reg + $obj->online_users_hidden + $obj->online_users_anon) > $obj->most_online) { $obj->most_online = $obj->online_users_reg + $obj->online_users_hidden + $obj->online_users_anon; $obj->most_online_time = __request_timestamp__; q('UPDATE fud30_stats_cache SET most_online='. $obj->most_online .', most_online_time='. $obj->most_online_time); } else if (!$obj->most_online_time) { $obj->most_online_time = __request_timestamp__; } return $obj; } $logedin = $forum_info = ''; if ($FUD_OPT_1 & 1073741824 || $FUD_OPT_2 & 16) { if (!($st_obj = db_sab('SELECT sc.*, m.subject AS last_msg_subject, u.alias AS last_user_alias FROM fud30_stats_cache sc INNER JOIN fud30_users u ON u.id=sc.last_user_id LEFT JOIN fud30_msg m ON m.id='. $last_msg_id .' WHERE sc.cache_age>'. (__request_timestamp__ - $STATS_CACHE_AGE)))) { $st_obj = rebuild_stats_cache($last_msg_id); } else if ($st_obj->online_users_text && (_uid || !($FUD_OPT_3 & 262144))) { $st_obj->online_users_text = unserialize($st_obj->online_users_text); } if (!$st_obj->most_online_time) { $st_obj->most_online_time = __request_timestamp__; } if ($FUD_OPT_1 & 1073741824 && (_uid || !($FUD_OPT_3 & 262144))) { if (!empty($st_obj->online_users_text)) { foreach($st_obj->online_users_text as $k => $v) { $logedin .= ''.$v.' '; } } $logedin = ' Logged in users list '.(($FUD_OPT_1 & 536870912) ? ''.(_uid || !($FUD_OPT_3 & 131072) ? '[ User Activity ]' : '' ) .' '.(_uid || !($FUD_OPT_3 & 262144) ? '[ Today's Visitors ]' : '' ) .'' : '' ) .' There are '.convertPlural($st_obj->online_users_reg, array(''.$st_obj->online_users_reg.' member',''.$st_obj->online_users_reg.' members')).', '.convertPlural($st_obj->online_users_hidden, array(''.$st_obj->online_users_hidden.' invisible member',''.$st_obj->online_users_hidden.' invisible members')).' and '.convertPlural($st_obj->online_users_anon, array(''.$st_obj->online_users_anon.' guest',''.$st_obj->online_users_anon.' guests')).' visiting this board.    [Administrator]   [Moderator]
    '.$logedin.' '; } if ($FUD_OPT_2 & 16) { $forum_info = ' Our users have posted a total of '.convertPlural($post_count, array(''.$post_count.' message',''.$post_count.' messages')).' inside '.convertPlural($thread_count, array(''.$thread_count.' topic',''.$thread_count.' topics')).'.
    Most users ever online was '.$st_obj->most_online.' on '.print_date('%a, %d %B %Y %H:%M', $st_obj->most_online_time).'
    We have '.$st_obj->user_count.' registered '.convertPlural($st_obj->user_count, array('user','users')).'.
    The newest registered user is '.htmlspecialchars($st_obj->last_user_alias, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).' '.($last_msg_id ? '
    Last message on the forum: '.htmlspecialchars($st_obj->last_msg_subject, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, null, false).'' : '' ) .' '; } } ?> PK!gY errmsg.incnu[ '.$GLOBALS['DISABLED_REASON'].' '); } else { exit(' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.' '.$RSS.'
    '.($GLOBALS['FUD_OPT_1'] & 1 && $GLOBALS['FUD_OPT_1'] & 16777216 ? '
    '._hs.'
     
    ' : '' ) .' '.$GLOBALS['FORUM_TITLE'].'
    '.$GLOBALS['FORUM_DESCR'].'


    '.$GLOBALS['DISABLED_REASON'].'


    Administrators can login here.

    '.(!empty($RIGHT_SIDEBAR) ? '
    '); } } /** User is banned. Notify and hang up. */ function exit_user_banned() { $TITLE_EXTRA = $RSS = null; header('HTTP/1.1 403 Forbidden'); header('Status: 403 Forbidden'); header('Connection: Close'); header('Content-type: text/html; charset=utf-8'); exit(' '.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.' '.$RSS.'
    '.($GLOBALS['FUD_OPT_1'] & 1 && $GLOBALS['FUD_OPT_1'] & 16777216 ? '
    '._hs.'
     
    ' : '' ) .' '.$GLOBALS['FORUM_TITLE'].'
    '.$GLOBALS['FORUM_DESCR'].'


    Your prior actions have resulted in you being permanently banned from this forum. Goodbye.

    '.(!empty($RIGHT_SIDEBAR) ? '
    '); } ?> PK!zS,,get_cur_ppage.incnu['Inbox', 2=>'Saved', 4=>'Draft', 3=>'Sent', 5=>'Trash'); function tmpl_cur_ppage($folder_id, $folders, $msg_subject='') { if (!$folder_id || (!$msg_subject && $_GET['t'] == 'ppost')) { $user_action = 'Writing a Private Message'; } else { $user_action = $msg_subject ? ''.$folders[$folder_id].' » '.$msg_subject.'' : 'Browsing '.$folders[$folder_id].' folder'; } return 'Private Messaging » '.$user_action.'

    '; } ?>PK!Ispintimenu[500 PK!K՞` timeslicenu[200 PK!1j*test-unit-2.0.0.0.gemspecnu[# -*- encoding: utf-8 -*- Gem::Specification.new do |s| s.name = "test-unit" s.version = "2.0.0.0" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Shota Fukumori"] s.date = "2024-09-23" s.description = "This library implements test/unit compatible API on minitest. The test/unit means that test/unit which was bundled with Ruby 1.8." s.email = "sorah@tubusu.net" s.executables = ["testrb"] s.files = ["test/unit.rb", "test/unit/assertions.rb", "test/unit/parallel.rb", "test/unit/testcase.rb", "bin/testrb"] s.homepage = "http://www.ruby-lang.org" s.require_paths = ["lib"] s.rubygems_version = "2.0.14.1" s.summary = "test/unit compatible API testing framework" end PK!?nssnu[PK!DB!!grubnu[PK!X_Gwwduseraddnu[PK!J~  accept_localnu[PK!SQgP accept_redirectsnu[PK!J~ accept_source_routenu[PK!J~  arp_acceptnu[PK!J~  arp_announcenu[PK!J~ Q arp_filternu[PK!J~  arp_ignorenu[PK!J~  arp_notifynu[PK!J~  bootp_relaynu[PK!J~B disable_policynu[PK!J~  disable_xfrmnu[PK!J~ force_igmp_versionnu[PK!J~  forwardingnu[PK!4"@ igmpv2_unsolicited_report_intervalnu[PK!" igmpv3_unsolicited_report_intervalnu[PK!J~  log_martiansnu[PK!J~ - mc_forwardingnu6$PK!J~ l medium_idnu[PK!SQg promote_secondariesnu[PK!J~  proxy_arpnu[PK!J~'proxy_arp_pvlannu[PK!J~hroute_localnetnu[PK!SQg rp_filternu[PK!SQgsecure_redirectsnu[PK!SQg%send_redirectsnu[PK!SQg eshared_medianu[PK!J~src_valid_marknu[PK!J~tagnu[PK!z+r anycast_delaynu[PK!J~ Yapp_solicitnu[PK!6]base_reachable_timenu[PK!ybase_reachable_time_msnu[PK!W9=(delay_first_probe_timenu[PK!6] pgc_intervalnu[PK!ݟ4 gc_stale_timenu[PK!$v gc_thresh1nu[PK!G ,gc_thresh2nu[PK!X jgc_thresh3nu[PK!J~locktimenu[PK!ўgU mcast_solicitnu[PK!ײ "proxy_delaynu[PK!ZX `proxy_qlennu[PK! retrans_timenu[PK!retrans_time_msnu[PK!ўgU "ucast_solicitnu[PK!wl aunres_qlennu[PK!Y1unres_qlen_bytesnu[PK!`rѐ usercp.incnu[PK!= Gwwallowed_user_lnk.incnu[PK!: i(return.incnu[PK!e ,-post_opt.incnu[PK!b8tabs.incnu[PK!"X&& "?drawpmsg.incnu[PK! meprivate.incnu[PK!k k th_nav.incnu[PK!">post_common.incnu[PK!oM55err.incnu[PK!T5vvthread_view_common.incnu[PK!*%%draw_forum_list.incnu[PK!^pVpV users.incnu[PK!Yw [<cookies.incnu[PK!gсс ]imsg_edt.incnu[PK!Z+ FaFa %drawmsg.incnu[PK!PP  @draw_forum_path.incnu[PK!Wu Dforumsel.incnu[PK!%i Nadmincp.incnu[PK!xϜ _logedin.incnu[PK!gY werrmsg.incnu[PK!zS,,get_cur_ppage.incnu[PK!I spintimenu[PK!K՞` Ftimeslicenu[PK!1j*test-unit-2.0.0.0.gemspecnu[PKKKɘ