I don't get the problem b/c the problem is the links.def and the fact that some fields are required and not in the page, but i set a field not on my page as required then entered everything in and it still got a success. So all i can do is post my delete.cgi and see if thats it.
sorry, i can't post it on hypermart b/c they execute anything w/ a shebang line as perl, even if its .txt
Code:
#!/usr/local/bin/perl
# -------------
# Links
# -------------
# Links Manager
#
# File: delete.cgi
# Description: Deletes a record marked unvalidated to the database and
# optionally emails someone.
# Author: Alex Krohn
# Email: alex@gossamer-threads.com
# Mod by: Lavon Russell
# Email: webmaster@lh.yi.org
# Web: http://www.gossamer-threads.com/
# Version: 2.0
#
# (c) 1998
Gossamer Threads Inc.
#
# This mod is freeware, but Links isn't! Created under
Gossamer Threads Inc. Links 2.0
# =====================================================================
#
# Setup Notes:
# Make sure the require statement below points to the config file.
# Required Librariers
# --------------------------------------------------------
eval {
($0 =~ m,(.*)/[^/]+,) && unshift (@INC, "$1"); # Get the script location: UNIX /
($0 =~ m,(.*)\\[^\\]+,) && unshift (@INC, "$1"); # Get the script location: Windows \
require "admin/links.cfg"; # Change this to full path to links.cfg if you have problems.
require "$db_lib_path/db_utils.pl";
require "$db_lib_path/links2.def";
$build_use_templates ?
require "$db_lib_path/site_html_templates.pl" :
require "$db_lib_path/site_html.pl";
};
if ($@) {
print "Content-type: text/plain\n\n";
print "Error including libraries: $@\n";
print "Make sure they exist, permissions are set properly, and paths are set correctly.";
exit;
}
# ========================================================
eval { &main; }; # Trap any fatal errors so the program hopefully
if ($@) { &cgierr("fatal error: $@"); } # never produces that nasty 500 server error page.
exit; # There are only two exit calls in the script, here and in in &cgierr.
sub main {
# --------------------------------------------------------
local (%in) = &parse_form;
# We are processing the form.
if (keys %in != 0) {
&process_form;
}
# Otherwise we are displaying the form (in site_html.pl).
else {
if ($db_single_category) {
my %is_valid = map { $_ => 1 } &category_list;
$ENV{'HTTP_REFERER'} =~ s,/[^/]+\.[^/]+$,,;
$ENV{'HTTP_REFERER'} =~ m,$build_root_url/(.+?)/?$,;
$is_valid{$1} ? &site_html_delete_form ($1) : &site_html_delete_form ();
}
else {
&site_html_delete_form ();
}
}
}
sub process_form {
# --------------------------------------------------------
my ($key, $status, @values, $found);
local (%original);
# Make sure we have an ID, URL, and Email address for the resource to delete.
# If any are missing, return an error message to the submitter.
((!$in{'URL'}) or
(!$in{'ID'}) or
(!$in{'Contact Email'})) and &site_html_delete_failure (qq|<ul>
<li>Missing the ID, URL, or Contact Email address of the resource to delete
</ul>|) and return;
# Let's check to make sure the link we want to update is actually in the
# database and that the link ID and Contact Email address match what is
# specified in the submission form.
open (DB, "<$db_file_name") or
&cgierr("Error in validate_records. Unable to open $db_file_name. Reason: $!");
$found = 0;
LINE: while (<DB> ) {
(/^#/) and next LINE;
(/^\s*$/) and next LINE;
chomp;
@data = &split_decode($_);
# Check for matching record ID, URL, and Contact Email address.
# If everything matches, get the record, stop searching.
if (($data[0] eq $in{'ID'}) and
($data[$db_url] eq $in{'URL'}) and
($data[$db_contact_email] eq $in{'Contact Email'})) {
$in{$db_key} = $data[0];
$found = 1;
%original = &array_to_hash (0, @data);
last LINE;
}
}
close DB;
# If no matching record found, display error message to user
!$found and &site_html_delete_failure (qq|<ol>
<li>The requested Link URL was not found in the database.
<li>The requested Link URL does not match the database URL for the specified Link ID.
<li>The requested Link Contact Email address does not match the database Contact Email
address for the specified Link ID.
<li>The Link ID doesn't exist.
</ol>|) and return;
# Since we have a valid link, let's make sure the system fields are set to their
# proper values. We will simply copy over the original field values. This is to stop
# people from trying to modify system fields like number of hits, etc.
foreach $key (keys %add_system_fields) {
$in{$key} = $original{$key};
}
# Set date variable to today's date.
$in{$db_cols[$db_modified]} = &get_date;
# Validate the form input..
$status = &validate_record(%in);
if ($status eq "ok") {
# First make sure the link isn't already in there.
open (DEL, "<$db_delete_name") or &cgierr ("error opening modified database: $db_delete_name. Reason: $!");
while (<DEL> ) {
chomp;
@values = split /\|/;
if ($values[0] eq $in{$db_key}) {
close DEL;
&site_html_delete_failure("A request to delete this record has already been received. Please try again later.");
return;
}
}
close DEL;
# Update the counter.
open (ID, ">$db_links_id_last_file_name") or &cgierr("error in get_defaults. unable to open id file: $db_links_id_last_file_name. Reason: $!");
flock(ID, 2) unless (!$db_use_flock);
print ID $in{$db_key}; # update counter.
close ID; # automatically removes file lock
# Print out the delete input to a "deletion database" where it is stored until
# the admin decides to delete it from the real database.
open (DEL, ">>$db_delete_name") or &cgierr("error in delete_record. unable to open validate file: $db_delete_name. Reason: $!");
flock(DEL, 2) unless (!$db_use_flock);
print DEL &join_encode(%in);
close DEL; # automatically removes file lock
# Send the admin an email message notifying of new addition.
&send_email;
# Send the visitor to the success page.
&site_html_delete_success;
}
else {
&site_html_delete_failure($status);
}
sub send_email {
# --------------------------------------------------------
# Sends an email to the admin, letting him know that there is
# a new link waiting to be deleted. No error checking as we don't
# want users to see the informative &cgierr output.
# Check to make sure that there is an admin email address defined.
$db_admin_email or &cgierr("Admin Email Address Not Defined in config file!");
my $to = $db_admin_email;
my $from = $in{$db_cols[$db_contact_email]};
my $subject = "Deletion to Database: ID: $in{'ID'} on $in{$db_cols[$db_modified]}\n";
my $msg = qq|
The following link is awaiting Deletion:
ID: $in{'ID'}
URL: $in{'URL'}
Contact Email: $in{'Contact Email'}
Reason: $in{'Reason'}
Remote Host: $ENV{'REMOTE_HOST'}
Referer: $ENV{'HTTP_REFERER'}
To Delete, please go to:
$db_script_url
Sincerely,
Links Manager.
|;
# Then mail it away!
require "$db_lib_path/Mailer.pm";
my $mailer = new Mailer ( { smtp => $db_smtp_server,
sendmail => $db_mail_path,
from => $from,
subject => $subject,
to => $to,
msg => $msg,
log => $db_mailer_log
} ) or return;
$mailer->send or return;
}
}