Gossamer Forum
Home : Products : DBMan : Installation :

DBMan error @INC error

Quote Reply
DBMan error @INC error
Hi all!

I have struggled with installation of DBMan and recieved the following:

The solution has got to be simple, right? All files were loaded in ASCII and the DB.cgi was chmod 0755. I read and tried to religiously follow the instructions included.

Any help appreciated



Brad



CGI ERROR
==========================================
Error Message : Error loading required libraries.
Check that they exist, permissions are set correctly and that they compile.
Reason: Can't locate http://iarp-florida.netfirms.com/cgi-bin/iarp-fl.cfg in @INC (@INC contains: /usr/bin/perl5 . /usr/local/nf/lib/perl5/5.6.1/i386-freebsd /usr/local/nf/lib/perl5/5.6.1 /usr/local/nf/lib/perl5/site_perl/5.6.1/i386-freebsd /usr/local/nf/lib/perl5/site_perl/5.6.1 /usr/local/nf/lib/perl5/site_perl .) at iarp-fl.cgi line 52.

Script Location : iarp-fl.cgi
Perl Version : 5.006001
Setup File : default.cfg

Form Variables
-------------------------------------------
add_form : 1

Environment Variables
-------------------------------------------
DOCUMENT_ROOT : /mnt/web_a/d31/s05/a000jou9
GATEWAY_INTERFACE : CGI/1.1
HTTP_ACCEPT : image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/ms-bpc, application/vnd.ms-excel, */*
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_ACCEPT_LANGUAGE: en-us
HTTP_CONNECTION : close
HTTP_COOKIE : NFrequest=test; NFreferer=http%3A%2F%2Fwww.google.com%2Fsearch%3Fhl%3Den%26ie%3DUTF-8%26oe%3DUTF-8%26q%3Dfree%2Bcgi%2Bhosting
HTTP_HOST : iarp-florida.netfirms.com
HTTP_NFUSERADDR : 209.4.17.191
HTTP_REFERER : http://trident1.crosswinds.net/iarp-search.htm
HTTP_USER_AGENT : Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; H010818)
HTTP_VIA : 1.0 iarp-florida.netfirms.com
HTTP_X_FORWARDED_FOR: 209.4.17.191
HTTP_X_FORWARDED_HOST: iarp-florida.netfirms.com
HTTP_X_FORWARDED_SERVER: w1_2a
LD_LIBRARY_PATH : /usr/local/nf/lib/nfsflock
PATH : /usr/local/bin:/usr/bin:/bin
QUERY_STRING : add_form=1
REMOTE_ADDR : 209.4.17.191
REMOTE_PORT : 4779
REQUEST_METHOD : GET
REQUEST_URI : /cgi-bin/iarp-fl.cgi?add_form=1
SCRIPT_FILENAME : /mnt/web_a/d31/s05/a000jou9/cgi-bin/iarp-fl.cgi
SCRIPT_NAME : /cgi-bin/iarp-fl.cgi
SCRIPT_URI : http://iarp-florida.netfirms.com/cgi-bin/iarp-fl.cgi
SCRIPT_URL : /cgi-bin/iarp-fl.cgi
SERVER_ADMIN : support@netfirms.com
SERVER_NAME : iarp-florida.netfirms.com
SERVER_PORT : 80
SERVER_PROTOCOL : HTTP/1.1
SERVER_SOFTWARE : Apache/1.3.20 (Unix) mod_perl/1.26 mod_ssl/2.8.4 OpenSSL/0.9.6a
Quote Reply
Re: [BradM] DBMan error @INC error In reply to
On netfirms I believe the path to perl is:

#!/usr/bin/perl

What is the url you are using to call the script? Or how to you have the $db_dir_url defined in your .cfg file? Is it defined as:

http://http://arp-florida.netfirms.com/cgi-bin

Below it shows:

REQUEST_URI : /cgi-bin/iarp-fl.cgi?add_form=1

when calling the iarp-fl.cgi you need to include the name of the db filename within the url such as:

iarp-fl.cgi?db=iarp-fl&add_form=1

Perhaps what it can't locate is the db related to your .cfg file and by using the example above it will solve your problem?

Unoffical DBMan FAQ

http://creativecomputingweb.com/dbman/index.shtml/
Quote Reply
Re: [LoisC] DBMan error @INC error In reply to
Lois,

Thanks I mad some adjustments and then moved all the files into the cgi bin for the sake simplicity, changed the cfg file to reflect this move. Ran the script several more times and found some other little errors but hit a road block.

ERROR
==========================================
Error Message : Error loading required libraries.
Check that they exist, permissions are set correctly and that they compile.
Reason: Can't locate http://www.iarp-florida.netfirms.com/cgi-bin/iarp-fl.pl in @INC (@INC contains: . /usr/local/nf/lib/perl5/5.6.1/i386-freebsd /usr/local/nf/lib/perl5/5.6.1 /usr/local/nf/lib/perl5/site_perl/5.6.1/i386-freebsd /usr/local/nf/lib/perl5/site_perl/5.6.1 /usr/local/nf/lib/perl5/site_perl .) at default.cfg line 51.
Compilation failed in require at iarp-fl.cgi line 51.

Script Location : iarp-fl.cgi
Perl Version : 5.006001
Setup File : default.cfg

Form Variables


Now the cfg file correctly points to the iarp-fl.pl file and the syntax in line 51 of the cgi file is require "/iarp-fl.pl"; # Authorization Routines is this correct.

With all the help and the previous posts, I think I am close to solving the problems.



Brad

Remember nothing is foolproof to a sufficiently talented fool!
Quote Reply
Re: [BradM] DBMan error @INC error In reply to
I'm wondering if it's having problems due to the dash in the filenames?

In your db.cgi file id you define the $db_script_path = ".";

It also helps to track down errors to move the line:

$db_debug = 1; within your .cfg file to up above the section #File and URL's.



if so, try setting it back to the default as it's only necessary in rare cases to have to define this.

Also note that when using the netfirm servers I was never able to get their $ENV['Documents_root'}/ .. command to work if you are using that within the DBMan scripts.

Unoffical DBMan FAQ

http://creativecomputingweb.com/dbman/index.shtml/

Last edited by:

LoisC: Nov 13, 2002, 1:01 PM
Quote Reply
Re: [BradM] DBMan error @INC error In reply to
The error seems to be stating that the script is trying to use a URL to find the perl library when infact it should be a path.

Can you post your db.cgi file or try changing:

require "/iarp-fl.pl";

to...

require "iarp-fl.pl";
Quote Reply
Re: [Paul] DBMan error @INC error In reply to
Paul and Lois:

Here's the latest erro message and the cgi file.

CGI ERROR
==========================================
Error Message : Error loading required libraries.
Check that they exist, permissions are set correctly and that they compile.
Reason: Invalid config file name: iarp-fl at iarp-fl.cgi line 49.

Script Location : iarp-fl.cgi
Perl Version : 5.006001
Setup File : iarp-fl.cfg

Form Variables
-------------------------------------------
add_form : 1
db : iarp-fl

Environment Variables
-------------------------------------------
DOCUMENT_ROOT : /mnt/web_a/d31/s05/a000jou9
GATEWAY_INTERFACE : CGI/1.1
HTTP_ACCEPT : */*
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_ACCEPT_LANGUAGE: en-us
HTTP_CONNECTION : close
HTTP_COOKIE : NFrequest=test; NFreferer=http%3A%2F%2Fwww.google.com%2Fsearch%3Fhl%3Den%26ie%3DUTF-8%26oe%3DUTF-8%26q%3Dfree%2Bcgi%2Bhosting
HTTP_HOST : iarp-florida.netfirms.com
HTTP_NFUSERADDR : 209.4.43.143
HTTP_USER_AGENT : Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; H010818)
HTTP_VIA : 1.0 iarp-florida.netfirms.com
HTTP_X_FORWARDED_FOR: 209.4.43.143
HTTP_X_FORWARDED_HOST: iarp-florida.netfirms.com
HTTP_X_FORWARDED_SERVER: w0_2a
LD_LIBRARY_PATH : /usr/local/nf/lib/nfsflock
PATH : /usr/local/bin:/usr/bin:/bin
QUERY_STRING : db=iarp-fl&add_form=1
REMOTE_ADDR : 209.4.43.143
REMOTE_PORT : 4564
REQUEST_METHOD : GET
REQUEST_URI : /cgi-bin/iarp-fl.cgi?db=iarp-fl&add_form=1
SCRIPT_FILENAME : /mnt/web_a/d31/s05/a000jou9/cgi-bin/iarp-fl.cgi
SCRIPT_NAME : /cgi-bin/iarp-fl.cgi
SCRIPT_URI : http://iarp-florida.netfirms.com/cgi-bin/iarp-fl.cgi
SCRIPT_URL : /cgi-bin/iarp-fl.cgi
SERVER_ADMIN : support@netfirms.com
SERVER_NAME : iarp-florida.netfirms.com
SERVER_PORT : 80
SERVER_PROTOCOL : HTTP/1.1
SERVER_SOFTWARE : Apache/1.3.20 (Unix) mod_perl/1.26 mod_ssl/2.8.4 OpenSSL/0.9.6a


CGI file here:



#!/usr/local/bin/perl
# =====================================================================
# ----------------------
# DBMan
# ----------------------
# Database Administrator
#
# File: db.cgi
# Description: This is the main program file and contains all the functionality
# of the database manager.
# Author: Alex Krohn
# Web: http://www.gossamer-threads.com/
# Version: 2.05
# CVS Revision: $Id: db.cgi,v 1.6 2000/07/08 18:14:40 alex Exp $
#
# COPYRIGHT NOTICE:
#
# Copyright 1997 Gossamer Threads Inc. All Rights Reserved.
#
# This program is being distributed as shareware. It may be used and
# modified free of charge for personal, academic, government or non-profit
# use, so long as this copyright notice and the header above remain intact.
# Any commercial use should be registered. Please also send me an email,
# and let me know where you are using this script. By using this program
# you agree to indemnify Gossamer Threads Inc. from any liability.
#
# Selling the code for this program without prior written consent is
# expressly forbidden. Obtain permission before redistributing this
# program over the Internet or in any other medium. In all cases
# copyright and header must remain intact.
#
# Please check the README file for full details on registration.
# =====================================================================

# If you run into problems, set $db_script_path to the full path
# to your directory.
$db_script_path = ".";

# Load the form information and set the config file and userid.
local(%in) = &parse_form;
$in{'db'} ? ($db_setup = $in{'db'}) : ($db_setup = 'default');
$in{'uid'} ? ($db_uid = $in{'uid'}): ($db_uid = '');

# Required Librariers
# --------------------------------------------------------
# Make sure we are using perl 5.003, load the config file, and load the auth file.
eval {
unshift (@INC, $db_script_path);
require 5.003; # We need at least Perl 5.003
unless ($db_setup =~ /^[A-Za-z0-9]+$/) { die "Invalid config file name: $db_setup"; }
require "$db_setup.cfg"; # Database Definition File
require "iarp-fl.pl"; # Authorization Routines
};
if ($@) { &cgierr ("Error loading required libraries.\nCheck that they exist, permissions are set correctly and that they compile.\nReason: $@"); }

# If we are using benchmarking, then we start a timer and stop it around &main. Then we print the difference.
if ($db_benchmark) { eval { require Benchmark; }; if ($@) { &cgierr ("Fatal Error Benchmark Module not installed: $@"); } $t0 = new Benchmark; }

eval { &main; }; # Trap any fatal errors so the program hopefully
if ($@) { &cgierr("fatal error: $@"); } # never produces that nasty 500 server error page.

# Stop the timer and print.
if ($db_benchmark) { $t1 = new Benchmark; print "<h6>Processing Time: " . timestr(timediff($t1, $t0)) . "</h6>"; }

# Display debugging information if requested.
&cgierr("Debug Information") if ($db_debug);

exit; # There are only two exit calls in the script, here and in in &cgierr.

sub main {
# --------------------------------------------------------
my ($status, $uid);
local($per_add, $per_view, $per_mod, $per_del, $per_admin);

$|++; # Flush Output Right Away

&auth_cleanup unless ($auth_no_authentication); # Remove old session files.

($status, $uid, $per_view, $per_add, $per_del, $per_mod, $per_admin)
= &auth_check_password; # Authenticate User, get permissions and userid.

if ($status eq "ok") {
# Set the script link URL with db and user info for links. Use $db_script_url for forms.
$db_script_link_url = "$db_script_url?db=$db_setup&uid=$db_uid";
if ($uid eq "default") { $db_userid = $uid; }
else { ($db_userid) = $db_uid =~ /([A-Za-z0-9]+)\.\d+/; }

# Main Menu. Check to see what the user requested, then, if he has permission for that
# request, do it. Otherwise send the user off to an unauthorized request page.
if ($in{'add_form'}) { if ($per_add) { &html_add_form; } else { &html_unauth; } }
elsif ($in{'add_record'}) { if ($per_add) { &add_record; } else { &html_unauth; } }
elsif ($in{'view_search'}) { if ($per_view) { &html_view_search; } else { &html_unauth; } }
elsif ($in{'view_records'}) { if ($per_view) { &view_records; } else { &html_unauth; } }
elsif ($in{'delete_search'}) { if ($per_del) { &html_delete_search; } else { &html_unauth; } }
elsif ($in{'delete_form'}) { if ($per_del) { &html_delete_form; } else { &html_unauth; } }
elsif ($in{'delete_records'}) { if ($per_del) { &delete_records; } else { &html_unauth; } }
elsif ($in{'modify_search'}) { if ($per_mod) { &html_modify_search; } else { &html_unauth; } }
elsif ($in{'modify_form'}) { if ($per_mod) { &html_modify_form; } else { &html_unauth; } }
elsif ($in{'modify_form_record'}) { if ($per_mod) { &html_modify_form_record; } else { &html_unauth; } }
elsif ($in{'modify_record'}) { if ($per_mod) { &modify_record; } else { &html_unauth; } }
elsif ($in{'admin_display'}) { if ($per_admin) { &admin_display; } else { &html_unauth; } }
elsif ($in{'logoff'}) { &auth_logging('logged off') if ($auth_logging);
(-e "$auth_dir/$db_uid") and ($db_uid =~ /^[\A-Za-z0-9]+\.\d+$/) and unlink ("$auth_dir/$db_uid");
$auth_logoff ? (print "Location: $auth_logoff\n\n") : (print "Location: $db_script_url\n\n");
}
elsif ((keys(%in) <= 2) ||
($in{'login'})) { &html_home; }
else { &html_unkown_action; }
}
# If we allow users to signup, and they want to, go to the signup form.
elsif ($auth_signup and $in{'signup_form'}) {
&html_signup_form;
}
elsif ($auth_signup and $in{'signup'}) {
&signup;
}
# Auth Check Password has determined that the user has not logged in, so let's send
# him to the login screen.
elsif ($status eq "no login") {
&html_login_form;
}
# Auth Check Password had an error trying to authenticate the user. Probably there was
# an invalid user/password or the user file has expired. Let's go to an error page and
# ask the user to re log on.
else {
&html_login_failure($status);
}
}

sub add_record {
# --------------------------------------------------------
# Adds a record to the database. First, validate_record is called
# to make sure the record is ok to add. If it is, then the record is
# encoded and added to the database and the user is sent to
# html_add_success, otherwise the user is sent to html_add_failure with
# an error message explaining why. The counter file is also updated to the
# next number.

my ($output, $status, $counter);
# Set the userid to the logged in user.
($auth_user_field >= 0) and ($in{$db_cols[$auth_user_field]} = $db_userid);

# First we validate the record to make sure the addition is ok.
$status = &validate_record;

# We keep checking for the next available key, or until we've tried 50 times
# after which we give up.
while ($status eq "duplicate key error" and $db_key_track) {
return "duplicate key error" if ($counter++ > 50);
$in{$db_key}++;
$status = &validate_record;
}

if ($status eq "ok") {
open (DB, ">>$db_file_name") or &cgierr("error in add_record. unable to open database: $db_file_name.\nReason: $!");
if ($db_use_flock) {
flock(DB, 2) or &cgierr("unable to get exclusive lock on $db_file_name.\nReason: $!");
}
print DB &join_encode(%in);
close DB; # automatically removes file lock
if ($db_key_track) {
open (ID, ">$db_id_file_name") or &cgierr("error in get_defaults. unable to open id file: $db_id_file_name.\nReason: $!");
if ($db_use_flock) {
flock(ID, 2) or &cgierr("unable to get exclusive lock on $db_id_file_name.\nReason: $!");
}
print ID $in{$db_key}; # update counter.
close ID; # automatically removes file lock
}
&auth_logging("added record: $in{$db_key}") if ($auth_logging);
&html_add_success;
}
else {
&html_add_failure($status);
}
}

sub delete_records {
# --------------------------------------------------------
# Deletes a single or multiple records. First the routine goes thrrough
# the form input and makes sure there are some records to delete. It then goes
# through the database deleting each entry and marking it deleted. If there
# are any keys not deleted, an error message will be returned saying which keys
# were not found and not deleted, otherwise the user will go to the success page.

my ($key, %delete_list, $rec_to_delete, @lines, $line, @data, $errstr, $succstr, $output, $restricted);
$rec_to_delete = 0;
foreach $key (keys %in) { # Build a hash of keys to delete.
if ($in{$key} eq "delete") {
$delete_list{$key} = 1;
$rec_to_delete = 1;
}
}
if (!$rec_to_delete) {
&html_delete_failure("no records specified.");
return;
}

open (DB, "<$db_file_name") or &cgierr("error in delete_records. unable to open db file: $db_file_name.\nReason: $!");
if ($db_use_flock) { flock(DB, 1); }
@lines = <DB>;
close DB;

($restricted = 1) if ($auth_modify_own and !$per_admin);

LINE: foreach $line (@lines) {
if ($line =~ /^$/) { next LINE; }
if ($line =~ /^#/) { $output .= $line; next LINE; }
chomp ($line);
@data = &split_decode($line);
($output .= "$line\n" and next LINE) if ($restricted and ($db_userid ne $data[$auth_user_field]));

$delete_list{$data[$db_key_pos]} ? # if this id is one we want to delete
($delete_list{$data[$db_key_pos]} = 0) : # then mark it deleted and don't print it to the new database.
($output .= $line . "\n"); # otherwise print it.
}

foreach $key (keys %delete_list) {
$delete_list{$key} ? # Check to see if any items weren't deleted
($errstr .= "$key,") : # that should have been.
($succstr .= "$key,"); # For logging, we'll remember the one's we deleted.
}
chop($succstr); # Remove trailing delimeter
chop($errstr); # Remove trailing delimeter

open (DB, ">$db_file_name") or &cgierr("error in delete_records. unable to open db file: $db_file_name.\nReason: $!");
if ($db_use_flock) {
flock(DB, 2) or &cgierr("unable to get exclusive lock on $db_file_name.\nReason: $!");
}
print DB $output;
close DB; # automatically removes file lock

&auth_logging("deleted records: $succstr") if ($auth_logging);
$errstr ? # Do we have an error?
&html_delete_failure($errstr) : # If so, then let's report go to the failure page,
&html_delete_success($succstr); # else, everything went fine.
}

sub modify_record {
# --------------------------------------------------------
# This routine does the actual modification of a record. It expects
# to find in %in a record that is already in the database, and will
# rewrite the database with the new entry. First it checks to make
# sure that the modified record is ok with validate record.
# It then goes through the database looking for the right record to
# modify, if found, it prints out the modified record, and returns
# the user to a success page. Otherwise the user is returned to an error
# page with a reason why.

my ($status, $line, @lines, @data, $output, $found, $restricted);

$status = &validate_record; # Check to make sure the modifications are ok!

if ($status eq "ok") {
open (DB, "<$db_file_name") or &cgierr("error in modify_records. unable to open db file: $db_file_name.\nReason: $!");
if ($db_use_flock) { flock(DB, 1); }
@lines = <DB>; # Slurp the database into @lines..
close DB;

($restricted = 1) if ($auth_modify_own and !$per_admin);

$found = 0; # Make sure the record is in here!
LINE: foreach $line (@lines) {
if ($line =~ /^$/) { next LINE; } # Skip and Remove blank lines
if ($line =~ /^#/) { $output .= $line; next LINE; } # Comment Line
chomp ($line);
@data = &split_decode($line);
($output .= "$line\n" and next LINE) if ($restricted and ($db_userid ne $data[$auth_user_field]));

if ($data[$db_key_pos] eq $in{$db_key}) {
# If we have userid's and this is not an admin, then we force the record to keep it's own
# userid.
if ($auth_user_field >= 0 and (!$per_admin or !$in{$db_cols[$auth_user_field]})) {
$in{$db_cols[$auth_user_field]} = $data[$auth_user_field];
}
$output .= &join_encode(%in);
$found = 1;
}
else {
$output .= $line . "\n"; # else print regular line.
}
}
if ($found) {
open (DB, ">$db_file_name") or &cgierr("error in modify_records. unable to open db file: $db_file_name.\nReason: $!");
if ($db_use_flock) {
flock(DB, 2) or &cgierr("unable to get exclusive lock on $db_file_name.\nReason: $!");
}
print DB $output;
close DB; # automatically removes file lock

&auth_logging("modified record: $in{$db_key}") if ($auth_logging);
&html_modify_success;
}
else {
&html_modify_failure("$in{$db_key} (can't find requested record)");
}
}
else {
&html_modify_failure($status); # Validation Error
}
}


Thnaks for your help



Brad

Last edited by:

BradM: Nov 14, 2002, 3:46 AM
Quote Reply
Re: [BradM] DBMan error @INC error In reply to
What is the name of your config file?

The scripts are looking for:
http://iarp-florida.netfirms.com/cgi-bin/iarp-fl.cfg


That URL returns a 404 file not found error message.

http://iarp-florida.netfirms.com/cgi-bin/default.cfg also returns a 404 error message.

Save your cfg file as a text file (Save As > default.txt) and upload it to your server. Provide the URL where the page can be viewed.
Quote Reply
Re: [Karen] DBMan error @INC error In reply to
You also have:

require "iarp-fl.pl"; # Authorization Routines
within your cgi file??? This should be:

require "auth.pl";

I'm not sure why that was changed in your script but it must find that file, and it's best not to rename it.

Yes, please do not post your files in the posts, as Karen stated .. please make a txt copy of the file and provide the url to where it can be viewed.

Unoffical DBMan FAQ

http://creativecomputingweb.com/dbman/index.shtml/