Demo Discussion
Forum Config Examples Contributions Vulnerabilities
  Discussion forum about ELOG  Not logged in ELOG logo
Message ID: 1929     Entry time: Thu Sep 7 22:06:00 2006
Icon: Smile  Author: Arno Teunisse  Author Email: a.teeling3@chello.nl 
Category: Question  OS: Windows  ELOG Version:  
Subject: elog perl script and the command prompt and eof 
hello

Just wrote a quick and dirty perl script ( See Attachment ) that let's you enter a record into the database. Put it into the directory where the config file is located. It look's at the "attributes = " and the "required attributes = "
within a section in the elog configuration file. The script is using elog.exe to accomplish this.

One problem with the script is that you must press Control_Z ( ^Z ) to store the data into the database.
Does anybody know how to prevent this ? It works also when redirecting the data into the script with a file input.txt. ( add2elog.pl confgi.cfg logbook < input.txt )

I Know this is NOT an elog question but maybe someone is happy with the script and has the answer for me.
Attachment 1: add2elog.pl  2 kB  | Hide | Hide all
=pod

elog -h hostname [-p port] [-l logbook]
     [-w password]
     [-u username password]
     -a <attribute1>=<value1>
     -a <attribute2>=<value2>
     ...
     -f attachment1
     -f attachment2
     ...
     -m textfile | text



This little perlscript is intented to enter attributes into elog with elog.exe from 
the command line. 

The script checks the "attributes" and the "required attributes". When a required
attribute is needed the users sees a "*" after the attributes name.



=cut


if ( $#ARGV <1 ) {
	print "Usage : $0 Configfile.cfg logbookname\n"; 
  print "Assumed is that you run this in the directory below the logbooks\n";
  print "directory.\n"; 
  exit;

}


$LOGBOOK = $ARGV[1];

chomp $LOGBOOK;
print "Logbook : $LOGBOOK\n";


$INSTALLDIR='c:/program files/elog';

$LOGBOOK_DIR='c:/program files/elog/logbooks';
# $CFGFILE = 'c:/program files/elog/contacts.cfg' ; # can have multiple logbooks
$CFGFILE = $ARGV[0];
chomp $CFGFILE;
print "Config file : $CFGFILE<< \n";

open ( CFG, "< $CFGFILE") or die "could not find config file\n";

while ( <CFG> ) {
	# find the logbook section
		chomp;
	next if not /^[$LOGBOOK\]/;
	while (<CFG> ) {
		last if /^\s*[.*\]\s*$/ ; # Next section 
		if ( /^attributes\s*=\s*/i ) {
			chomp;
			s/\s*$//;
			s/^Attributes\s*=\s*//i;
			@attributes = split(/\s*,\s*/);
			#print "Found it\n";
			next;
		}elsif ( /^Required\s*Attributes\s*=\s*/i ) {
			 chomp;
			 s/\s*$//;	# remove the last white space if there is one
			 s/^Required Attributes\s*=\s*//i;
			 @RAttributes = split (/\s*,\s*/);
			 # last; # this assumes that "Required Attributes" comes after "Attributes"
    }
   }
 }
close CFG;

## Nothing usefull found , wrong config file ???
if ( scalar (@attributes) == 0 ){
	print "Nothing found\n";
	exit;
}

for ( @RAttributes ) {
		#print "==>$_<==\n";
		$RAttributes{$_} = $_ ;
}
# CHECK the RAttributes hash
#while (( $KEY, $VALUE ) = each %RAttributes ) {
#		print "Required Attribute : $VALUE\n";
#}




for ( @attributes ) { 
		print "$_ " ;
		$ATTR = $_;
	if ( exists( $RAttributes{$_} )) {
		print "* : ";
		$flag=1;
	} else {
		print ": ";
		$flag =0;
	}
	
	$HASH{$_} = <STDIN> ;
	
	chomp $HASH{$_};
	if ( $flag and $HASH{$_} eq ""  ) {
				while ( $HASH{$_} eq "" ) {
						print "This is a Required attribute\n";
						print "$ATTR * : " ;	
						$HASH{$_} = <STDIN> ;
						chomp $HASH{$_};		
		}	
	}
}


# send the info to the elog server
for ( @attributes ) { 
	print "\n -a $_=$HASH{$_}\n" ;
	if ( defined ( $HASH{$_} )) {
	
	$ATTRIBUTES .= " -a \"${_}=$HASH{$_}\"";
	#print "$ATTRIBUTES\n";
}
}

 print "\n$ATTRIBUTES\n";

print "\n";
system 	( "elog.exe -h localhost -p 80 -l $LOGBOOK $ATTRIBUTES" );
ELOG V3.1.5-fe60aaf