CGI :(

Apache, Lighttpd, nginx, Cherokee
markus72
Posts: 27
Joined: 2004-02-12 17:24
 

Re: CGI :(

Post by markus72 »

Hallo Wolfgang,

dann wird das wohl nicht so einfach ... denn unter k habe ich alle domains die mit k anfangen und unter h alle die mit h anfangen usw...

muß ich jetzt für alle so ein link erstellen
ln -sf /home/k/www /srv/www/htdocs

ln -sf /home/m/www /srv/www/htdocs

usw oder gibts da noch was anderes ?
wgot
Posts: 1675
Joined: 2003-07-06 02:03
 

Re: CGI :(

Post by wgot »

Hallo,

uff, das wird komplizierter. :roll:

Wie viele Domains hast Du denn, daß Du für jeden Anfangsbuchstaben einen eigenen Ordner nehmen willst?

Auf wie viele User (Menschen) sind diese Domains verteilt?

Dein DocRoot aus der Fehlermeldung:
/home/k/xxxxxxxx/public_html/cgi-bin/env.cgi
Das /k ist geklärt, was ist /xxxxxxxx - ist das etwa die Domain? Dann müßtest Du für jede Domain einen Linuxuser anlegen.

Les das mal komplett durch, insbesondere um das Konzept von suexec zu verstehen:
http://httpd.apache.org/docs-2.0/de/suexec.html

Gruß, Wolfgang
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: CGI :(

Post by oxygen »

Dann muss der Link

ln -sf /home /srv/www/htdocs

heißen, auch wenn ich diese "Lösung" bescheuert finde.
jens28
Posts: 5
Joined: 2004-02-29 17:46
 

Re: CGI :(

Post by jens28 »

hi,
ich habe da auch nen problem!
und zwar habe ich einen newsscrpit laufen der auch wunderbar funktioniert.

news.cgi

Code: Select all

#!/usr/bin/perl
use CGI ':standard';
use CGI::Carp 'fatalsToBrowser';
use CGI::Cookie;

require "news_cfg.pl";

my @allow = ('','News Code erlaubt<br>keine Bilder','News Code erlaubt','HTML erlaubt');

sub news_code {
	my $datum = &get_date($_[7]); # Datum
	my $code = $_[0];
	$x = $_[8];
	$x =~ s/<br>//ig;
	$code =~ s/#MAIL#/$_[4]/eig;
	$code =~ s/#MAIL([0-9]+)#/substr($_[4],0,$1)/eig;
	$code =~ s/#NAME#/$_[3]/eig;
	$code =~ s/#NAME([0-9]+)#/substr($_[3],0,$1)/eig;
	$code =~ s/#DATUM#/$datum/eig;
	$code =~ s/#TEXT#/$_[8]/eig;
	$code =~ s/#TEXT([0-9]+)(N?)#/substr($2?$x:$_[8],0,$1)/eig;
	$code =~ s/#SYMB#/"<img src="$symb_url/".$_[6]."">"/eig if($_[6]);
	$code =~ s/#SYMB#//ig;
	$code =~ s/#ID#/$_[1]/eig;
	$code =~ s/#BETREFF#/$_[5]/eig;
	$code =~ s/#BETREFF([0-9]+)#/substr($_[5],0,$1)/eig;
	for (my $fx=1;$fx<6;$fx++) {
	  $code =~ s/#F$fx#/$_[8+$fx]/eig;
	  if ($_[8+$fx]) {
	    $code =~ s/#IFF$fx#//eig;
		  $code =~ s/#/IFF$fx#//eig;
		  } else {
		  $code =~ s/#IFF$fx#.*?#/IFF$fx#//eigs;
		  };
		};
  return $code;
};
	
	
sub eingabe_form {
  my $code = $form_template;
  $code =~ s/#NAME#/textfield(-name=>'u', -size=>10)/eig;
	$code =~ s/#PASS#/password_field(-name=>'p', -size=>10)/eig;
	$code =~ s/#MAIL#/ textfield(-name=>'m', -size=>60)/eig;
	$code =~ s/#BETREFF#/textfield(-name=>'s', -size=>60)/eig;
	$code =~ s/#F1#/textfield(-name=>'f1', -size=>60)/eig;
	$code =~ s/#F2#/textfield(-name=>'f2', -size=>60)/eig;
	$code =~ s/#F3#/textfield(-name=>'f3', -size=>60)/eig;
	$code =~ s/#F4#/textfield(-name=>'f4', -size=>60)/eig;
	$code =~ s/#F5#/textfield(-name=>'f5', -size=>60)/eig;
  if ($symb_akt) {
	my $symb="";
  opendir(D, $symb_path) or die $!;
  my @symb = grep { (-f $symb_path."/".$_) && ($_ =~ /.(jpg|gif|png|jpeg)$/) && ($_ ne "ok.gif") } readdir(D);
  closedir(D);
  param('y', $symb[0]) if ((!param('y')) && ($symb[0]));
  foreach(@symb) {
			$symb .= "<input type="radio" name="y" value="$_"";
			$symb .=" checked" if ($_ eq param('y'));
			$symb .= "><img src="$symb_url/$_"> ";
			};                   
	$code =~ s/#SYMB#/$symb/eig;
	};
	$code =~ s/#TEXT#/textarea(-name=>'t', -cols=>60, -rows=>15, -wrap=>'virtual')/eig;
	$code =~ s/#TEXTSTAT#/($_[0]==1)?"HTML erlaubt":$allow[$secur_mode]/eig;
  my $newscodehlp=""; 
  if (($secur_mode>0) && ($secur_mode<3)) {
				$newscodehlp = "<font size=-2><br><b>NewsCode:</b> [b]<b>Fett</b>[/b] , [i]<i>Kursiv</i>[/i] ,  [u]<u>Unterstrichen</u>[/u]";
				$newscodehlp .= " , [br] neue Zeile , [p]Absatz[/p] ,  [z]Zentriert[/z]";
				$newscodehlp .= "<br>URL: [url]http://www.name.de[/url] oder [url=http//www.name.de]Linktext[/url] , ";
				$newscodehlp .= "E-Mail: [email]mail@name.de[/email] oder [email=mail@name.de]E-Mail[/email]<br>";
				$newscodehlp .= "Bilder: [img=http://www.name.de/bild.gif]" if ($secur_mode==2);
				$newscodehlp .= "</font>";
				};
	$code =~ s/#TEXTHELP#/$newscodehlp/eig;
	$code =~ s/#SENDEN#/submit(-value=>'Eintragen')/eig;
  $code .=  hidden(-name=>'a');
	return $code;
};

	
sub get_date {
	my ($sec,$min,$h,$tag,$mon,$jahr,$wday, $yday,$isdst) =  localtime($_[0]+$time_offset*60*60);
	$mon++; $jahr+=1900; $h = sprintf("%02d", $h); $min = sprintf("%02d", $min);$sec = sprintf("%02d", $sec);
	my $mon2 = sprintf("%02d", $mon);
	my $tag2 = sprintf("%02d", $tag);

	my @tag_k=('So','Mo','Di','Mi','Do','Fr','Sa');
	my @tag_l=('Sonntag','Montag', 'Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
	my @mon_k=('.','Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Nov','Dez');
	my @mon_l=('.','Januar','Februar','März','April','Mai','Juni','Juli','August', 'September','Oktober','November','Dezember');
	my $dat = $datformat;
	$dat =~ s/#t2/$tag2/eig;
	$dat =~ s/#t/$tag/eig;
	$dat =~ s/#wk/$tag_k[$wday]/eig;
	$dat =~ s/#wl/$tag_l[$wday]/eig;
	$dat =~ s/#mn/$mon/eig;
	$dat =~ s/#m2/$mon2/eig;
	$dat =~ s/#mk/$mon_k[$mon]/eig;
	$dat =~ s/#ml/$mon_l[$mon]/eig;
	$dat =~ s/#jk/($jahr % 100)/eig;
	$dat =~ s/#jl/$jahr/eig;
	$dat =~ s/#s/$h/eig;
	$dat =~ s/#n/$min/eig;
	$dat =~ s/#k/$sec/eig;
  return $dat;
};

$max_news = 10 if ($max_news == 0);


#Kekse
my @cookies=();
if ((param('u') ne "") && (param('save_user')==1)) {
 push(@cookies, new CGI::Cookie(-name=>'NewsUser', -value=>param('u'), -expires=>"+12M"));
 };
if ((param('p') ne "") && (param('save_pass')==1)) {
 push(@cookies, new CGI::Cookie(-name=>'NewsPass', -value=>param('p'), -expires=>"+12M"));
 };

if (param('del_cookies') == 1) {
 @cookies=();
 push(@cookies, new CGI::Cookie(-name=>'NewsUser', -value=>"", -expires=>"-12M"));
 push(@cookies, new CGI::Cookie(-name=>'NewsPass', -value=>"", -expires=>"-12M"));
};

my %keks=fetch CGI::Cookie;
param('u', $keks{'NewsUser'}->value) if (($keks{'NewsUser'}) && (param('u') eq ""));
param('p', $keks{'NewsPass'}->value) if (($keks{'NewsPass'}) && (param('p') eq ""));
 
print header(-expires=>'now', -cookie=>@cookies), start_html(-title=>$site_title.' News', -background=>$background, -text=>$textcolor,	-style=>{'src'=>$style}, -link=>$linkcolor, -bgcolor=>$bgcolor);

&print_file($inc_top);
print h1($site_title.' News');

my @user=();
my @news=();

open(F, "<$data_path/news_user.dat") or die $!;
while (<F>) { chomp; push(@user, $_); };
close(F);

if ((!(param('u')) || !(param('p')) || !(param('a'))) && (param('a') ne 'e')) {
	my %labels = ('p'=>'Passwort ändern','e'=>'News eintragen', 'f'=>'News freischalten','u'=>'Benutzer bearbeiten');
	print start_form, "<table><tr><td>Login:</td><td>", textfield(-name=>'u', -size=>10),"</td></tr><tr><td>",
	  "Passwort:</td><td>", password_field(-name=>'p', -size=>10), "</td></tr><tr><td>Aktion:</td><td>",
		popup_menu(-name=>'a', -values=>['p','e', 'f','u'], -labels=>%labels, -default=>'e'), "</td></tr><tr><td>Cookies:</td><td>", checkbox(-name=>'save_user', -value=>1, -label=>"Benutzer speichern"), checkbox(-name=>'save_pass', -value=>1, -label=>"Passwort speichern"), checkbox(-name=>'del_cookies', -value=>1, -label=>"Cookies löschen"), "</td></tr><tr><td colspan=2>", submit(-value=>'Start'),"</td></tr></table>", end_form;
	  &ende();
	exit;
};

my $ok=0;
my $isAdmin = 0;
my $can_html = ($secur_mode>=3);

foreach(@user) {
	my @cu = split(/~/, $_);
	if (($cu[0] eq param('u')) && ($cu[1] eq crypt(param('p'), 'xx')) && (index($cu[3], param('a'))>=0)) {
		$ok = 1;
		$can_html = 1 if ($secur_user==1);
		$isAdmin = (index($cu[3], "a")>=0);
		param('m', $cu[2]);
		};
};

if ((!$ok)  && ($admin_post)) { print "Fehler: Zugriff verweigert !"; &ende(); };

if (param('a') eq 'e') {
	if (!param('m') || !param('t') || !param('s') || (!$ok && !param('m'))) {
		print start_form, &eingabe_form(0), end_form;
		&ende;
	} else {
		# UnHTML
  		 foreach (param()) {
			   my $x = param($_);
				 $x =~ s/<.*?>//g if (!$can_html);
				 if ($secur_mode>0) {
				     $x =~ s/[(/)?z]/<$1center>/ig;
					   $x =~ s/[(/)?(b|i|u|p|br)]/<$1$2>/ig;
						 $x =~ s/[url=(.*?)](.*?)[/url]/<A href="$1">$2</a>/ig;
						 $x =~ s/[url](.*?)[/url]/<A href="$1">$1</a>/ig;
						 $x =~ s/[email=(.*?)](.*?)[/email]/<A href="mailto:$1">$2</a>/ig;
						 $x =~ s/[email](.*?)[/email]/<A href="mailto:$1">$1</a>/ig;
						 };
				if ($secur_mode>1) {
						 $x =~ s/[img=(.*?)]/<img src="$1">/ig;
						 };
				param($_, $x);
			};
		open(F, ">>$data_path/news_news.dat") or die $!;
		flock(F, 2);
		my $text = param('t');
		$text =~ s/n/<br>/g;
		$text =~ tr/r/ /;
		$text =~ s/<!--.*?-->//g;
		my $datum = time;
		print F substr(rand(100000),0,8)."~$ok~".param('u')."~" .param('m')."~".param('s')."~".param('y')."~".$datum."~".$text."~".param('f1')."~".param('f2')."~" .param('f3')."~".param('f4')."~".param('f5')."n";
		close(F);
		print h2("News wurden gespeichert !");
		if ($ok) {
			&update();
		} else {
			print "Der Eintrag wird erst nach Freigabe durch $site_title ercheinen.";
		};
		
		if ((($mailmode == 1) && !$ok) || ($mailmode == 2)) {
		open(MAIL, "|$sendmail -t") or die $!;
		print MAIL "From: ".param('m')."nTo: $from_mailn",
			"Subject: News: ".param('s').' ('.param('u').")nn",
			"$site_title NewsnnEintrag von: ".param('u')." (".param('m'),")n";
			if ($ok) {
				print MAIL "Datum: ", &get_date($datum), "n";
			} else {
				print MAIL "Datum: (wird nach Freigabe eingetragen)n";
			};
			print MAIL "Betreff: ", param('s'), "nText:n", param('t'), "nStatus: $ok (0-vorgeschlagen, 1-eingetragen)nn",$cgi_url, "/news.cgin";
		if ((!close(MAIL)) && (!$sendmail_ignore_err)) { print "<font size="-2">Warnung: sendmail - Fehler</font>"; };
		};
		&ende;
	};
};

unless ($ok) { print "Fehler: Zugriff verweigert"; &ende(); };

if (param('a') eq 'p') {
	if (!param('p1') || !param('p2') || (param('p1') ne param('p2')) || !param('m')) {
		print h2('Passwort/E-Mail für '.param('u').' ändern'), start_form,
			hidden(-name=>'a'), hidden(-name=>'u'), hidden(-name=>'p'),
			"<table><tr><td>neues Passwort:</td><td>", password_field(-name=>'p1', -size=>10), "</td></tR>",
			"<tr><td>wiederholen:</td><td>",  password_field(-name=>'p2', -size=>10), "</td></tR>",
			"<tr><td>E-Mail:</td><td>", textfield(-name=>'m', -size=>40), "</td></tr></table>",
			submit(-value=>'Ã?ndern'), end_form;
		} else {
		foreach(@user) {
			my @cu = split(/~/, $_);
			if ($cu[0] eq param('u')) {
				$cu[1] = crypt(param('p1'),'xx');
				$cu[2] = param('m');
				$_ = join("~", @cu);
				print h2('Passwort/E-Mail geändert.');
				&save_user;
			};
		};
	};
	&ende;
};

if (param('a') eq 'u') {
	if (param('set')) {
		foreach(@user) {
			my @cu = split(/~/, $_);
			$cu[1] = crypt(param($cu[0]."_pwd"), "xx") if (param($cu[0]."_pwd"));
		    $cu[2] = param($cu[0]."_mail");
				my $wa = (index($cu[3], "a")>=0);
		    $cu[3] = "p";
		    $cu[3] .= "u" if (param($cu[0]."_u"));
		    $cu[3] .= "f" if (param($cu[0]."_f"));
		    $cu[3] .= "e" if (param($cu[0]."_e"));
		    if ($isAdmin) {
				  $cu[3] .= "a" if (param($cu[0]."_a"));
					} else {
					$cu[3] .= "a" if ($wa);
					};
		    $_ = join("~", @cu);
		    $_ = "" if ((param($cu[0]."_del")) && ($isAdmin || !$wa));
		};
		if (param('new_nick')) {
			push(@user, param('new_nick')."~".crypt(param('new_pwd'),'xx')."~".param('new_mail')."~e");
			CGI::delete('new_nick');CGI::delete('new_pwd');CGI::delete('new_mail');
		};
		&save_user;
	};
	print h2('Benutzer bearbeiten'), start_form, "<table border><tr><th>Nick</th><th>Passwort</th> <th>Mail</th><th>Eintragen</th><th>Freigeben</th><th>Benutzer<br>bearbeiten</th> <th>Admin</th><th><font color=red>Löschen</font></th></tr>";
	foreach(@user) {
		next if (!$_);
		my @cu = split(/~/, $_);
		param($cu[0]."_u", (index($cu[3], "u")>=0));
		param($cu[0]."_f", (index($cu[3], "f")>=0));
		param($cu[0]."_e", (index($cu[3], "e")>=0));
		param($cu[0]."_a", (index($cu[3], "a")>=0));
		param($cu[0]."_mail", $cu[2]);
		print "<tr><td>$cu[0]</td><td>", textfield(-name=>$cu[0]."_pwd", -size=>10), "</td><td>", 
			textfield(-name=>$cu[0]."_mail", -size=>30), "</td><td>", checkbox(-name=>$cu[0]."_e", -value=>'1', -label=>''), "</td><td>",
			checkbox(-name=>$cu[0]."_f", -value=>'1', -label=>''), "</td><td>", checkbox(-name=>$cu[0]."_u", -value=>'1', -label=>''),"</td><td>",checkbox(-name=>$cu[0]."_a", -value=>'1', -label=>''),"</td><td>",
			checkbox(-name=>$cu[0]."_del", -value=>'1', -label=>''), "</td></tR>";
		};
	print "<tr><td>", textfield(-name=>'new_nick', -size=>10), "</td><td>", textfield(-name=>"new_pwd", -size=>10), "</td><td>", 
	  textfield(-name=>"new_mail", -size=>30), "</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td></tR>";
	print "</table><p><b>Passwort</b> leer lassen, um altes beizubehalten<p>", hidden(-name=>'u'), hidden(-name=>'p'),
		hidden(-name=>'a'), submit(-name=>'set', -value=>"Ã?bernehmen"), end_form;
	&ende;
};

if (param('a') eq 'f') {
	print h2('Freigabe');
	&load_news;
	if (param('set')) {
		foreach(@news) {
			my @cn = split(/~/, $_);
			$cn[1] = 1 if param($cn[0]."_frei");
			$cn[6] = time if param($cn[0]."_frei");
			$_ = join("~", @cn);
			$_ = "" if  param($cn[0]."_del");
		};
		&save_news;
		&update;
	};
	if (param('postedit')) {
		foreach(@news) {
			my @cn = split(/~/, $_);
			if ($cn[0] eq param('id')) {
				my $text = param('t');
				$text =~ s/n/<br>/g;
				$text =~ tr/r/  /;
				$text =~ s/<!--.*?-->//g;
				my $datum=$cn[6];
				$datum = time if (param('d'));
				param('y','1') if (!param('y'));
				for(my $fx=1;$fx<6;$fx++) { if (!param('f'.$fx)) { param('f'.$fx,0 ); }};
				$_ = join("~", $cn[0], $cn[1], param('on'), param('om'), param('s'), param('y'), $datum, $text, param('f1'), param('f2'), param('f3'), param('f4'), param('f5'));
			};
		};
		&save_news;
		&update;
	};
	if (param('edit')) {
		foreach(@news) {
			my @cn = split(/~/, $_);
			if ($cn[0] eq param('edit')) {
			  $cn[7] =~ s/<br>/n/g;
				param('on', $cn[2]);param('om', $cn[3]);param('s', $cn[4]);param('y', $cn[5]);param('d', $cn[6]);param('t', $cn[7]);
				for (my $fx=1;$fx<6;$fx++) { param('f'.$fx, $cn[7+$fx]); };
				param('id', param('edit'));
				print h2('Beitrag bearbeiten'), start_form, "<table border>", 
					"<tr><th>Name:</th><td>", textfield(-name=>'on', -size=>10), "</td></tr>",
					"<tr><th>E-Mail:</th><td>", textfield(-name=>'om', -size=>60), "</td></tr>",
					"<tr><th>Datum:</th><td>", checkbox(-name=>'d', -value=>'1', -label=>'auf aktuelles Datum setzen'), "</td></tr>",
					"<tr><th>Titel:</th><td>", textfield(-name=>'s', -size=>60), "</td></tr>";
					if ($symb_akt) {
					print "<tr><th>Symbol:</th><td>";
          opendir(D, $symb_path) or die $!;
    			my @symb = grep { (-f $symb_path."/".$_) && ($_ =~ /.(jpg|gif|png|jpeg)$/) && ($_ ne "ok.gif") } readdir(D);
		    	closedir(D);
			    param('y', $symb[0]) if ((!param('y')) && ($symb[0]));
      		foreach(@symb) { 
		    	   print "<input type="radio" name="y" value="$_""; 
			       print(" checked") if ($_ eq param('y'));
    				 print "><img src="$symb_url/$_">";
		    	};
					print "</td></tr>"; };
					for (my $fx=1; $fx<6; $fx++) {
  					print "<tr><th>F$fx:</th><td>", textfield(-name=>'f'.$fx, -size=>60), "</td></tr>";
						};
				print "<tr><th>Text:<br><font size=-2>HTML erlaubt</font></th><td>", textarea(-name=>'t', -cols=>60, -rows=>15, -wrap=>'virtual'), "</td></tr>",
					"<tr><th>&nbsp;</th><td>", submit(-name=>'postedit', -value=>'Ã?ndern'), "</td></tr>",
					"</table>", hidden(-name=>'a'), hidden(-name=>'u'), hidden(-name=>'p'), hidden(-name=>'id'), end_form;
					&ende;
			}; # if
		}; # foreach
	} else {
		print start_form, "<table border><tr><th>Beitrag</th><th>Aktionen</th></tr>";
		foreach(@news) {
			my @cn = split(/~/, $_);
			print "<tr><td>", news_code($news_template, @cn), "</td><td>", "ID: $cn[0]<br>";
				if (!$cn[1]) {
					print checkbox(-name=>$cn[0]."_frei", -value=>'1', -label=>'Freigeben'), "<br>";
				};
				print checkbox(-name=>$cn[0]."_del", -value=>'1', -label=>'Löschen'), "<br>",
				"<input type=radio name="edit" value="$cn[0]"> Bearbeiten<br><font size=-1>Nur eine wählen !</font></td></tr>";
			};
		print "</table>", hidden(-name=>'a'), hidden(-name=>'u'), hidden(-name=>'p'), submit(-name=>'set', -value=>'Ausführen'),
			end_form;
		&ende;
	};
};
				

sub ende {
	print hr, "<font size=-2>", a({-href=>$cgi_url."/news.cgi"}, "Newsverwaltung"), " - Script Version 1.542 (c) ", a({-href=>"http://www.alexander-fleischer.de"}, alx), " 2000, 2001 - ", a({-href=>"mailto:cgi@alexander-fleischer.de"}, "E-Mail"), "</font>";
	&print_file($inc_bottom);
	print end_html;
	exit;
	};
		
sub save_user {
	open(F, ">$data_path/news_user.dat") or die $!;
	flock(F, 2);
	foreach(@user) { next if (!$_);print F "$_n"; };
	close(F);
};

sub save_news {
	open(F, ">$data_path/news_news.dat") or die $!;
	flock(F, 2);
	foreach(@news) { next if (!$_);print F "$_n"; };
	close(F);
};

sub load_news {
	open(F, "<$data_path/news_news.dat") or die $!;
	flock(F, 2);
	@news=();
	while(<F>) { chomp; push(@news, $_); };
	close(F);
};

sub update {
	&load_news;
	my @sort_news = sort newssort @news;
	my $count = 0;
	open(F, ">$html_path/news.txt") or die $!;
	flock(F, 2);
	if ($hdr_use) {
	  open(G, ">$html_path/news_hdr.txt") or die $!;
  	flock(G, 2);
	};
	foreach(@sort_news) {
		my @cn = split(/~/, $_);
		next if (!$cn[1]);
		$count++;
		if ($count<=$max_news) {
			print F news_code($news_template, @cn);
			if ($hdr_use && ($count<=$hdr_cnt)) { print G news_code($hdr_template, @cn); };
			} else  {
			  &archive_news($_);	
			  $_="";
			};
		};
	close(F);
	if ($hdr_use) { close(G); };
	@news = @sort_news;
	&save_news;
};

sub archive_news {
	my @cn = split(/~/, $_[0]);
	my ($x,$x,$x,$x,$mon,$jahr,$x, $x,$x) =  localtime($cn[6]);
	$mon++; $jahr+=1900; $mon = sprintf("%02d", $mon);
	my $mfile = "$html_path/$jahr$mon$index_ext";
	my @html=();
	if (!-r $mfile) {
		my %monat = ('01', 'Januar', '02', 'Februar', '03', 'März', '04', 'April', '05', 'Mai', '06', 'Juni', '07', 'Juli', '08', 'August',
					 '09', 'September', '10', 'Oktober', '11', 'November', '12', 'Dezember');
		open(G, "<$html_path/mtemplate.dat") or die $!;
		open(H, ">$mfile") or die $!;
		flock(G, 2);flock(H, 2);
    	while(<G>) { s/<!-- monat -->/"$monat{$mon} $jahr"/eg; print H $_;};
    	close(G); close(H);
    	open(G, "+<$html_path/$index_name") or die $!;
    	while(<G>) {chomp; push(@html, $_); };
    	seek(G,0,0);
    	foreach(@html) {
    		print G "$_n";
    		if (/<!-- insert -->/) {
    			print G "<a href="$html_url/$jahr$mon$index_ext">$monat{$mon} $jahr</a><br>n";
    		};
    	};
    	close(G);
    	close(H);
    };
    
	@html=();
	open(G, "+<$mfile") or die $!;
    flock(G, 2);
    while(<G>) {chomp; push(@html, $_); };
    seek(G,0,0);
    foreach(@html) {
    	print G "$_n";
    	if (/^<!-- insert -->/) { $_=""; last; };
    	$_="";
    };
    print G news_code($news_template, @cn);
	foreach(@html) {
    	next if (!$_);
    	print G "$_n";
    	};
	close(G);
};

sub newssort {
	my @ca = split(/~/, $a);
	my @cb = split(/~/, $b);
	$cb[6] <=> $ca[6];
};

sub print_file {
	if (($_[0]) && (-r $_[0])) {
	open(FILE1, $_[0]) or die $!;
	while (<FILE1>) {print;};
	close(FILE1);};
};


wenn ich jetzt aber nen testscript test.cgi oder auch check.pl laufen lassen
will kommt immer internal server error

test.cgi

Code: Select all

#!/usr/bin/perl

die("Hallo "Welt");
check.pl

Code: Select all

#!/usr/bin/perl

print "Content-type: text/htmlnn";

while (($key, $val) = each %ENV) {
print "$key = $val<br>n";
}
das ist doch nen anderes problem als hier im thread beschrieben,oder ??
weil sonst dürfte der newsscript ja auch nicht funktionieren.

hat jemand ne idee ?

gruss
jens

â?¬dit: es läuft auch sonst kein script NUR der newsscript
wgot
Posts: 1675
Joined: 2003-07-06 02:03
 

Re: CGI :(

Post by wgot »

Hallo Jens28,

liegen die Scripts alle im gleichen Ordner? Wenn im gleichen Ordner ein Script geht und andere nicht, liegt's am Script oder es wurde falsch eingerichtet.

Schau mal in die Logfiles (/var/log/warn bzw /var/log/syslog) und in die suexec.log bzw suexec_log. Vorher das kaputte Script aufrufen, damit die Meldung im Logfile unten steht.

test.cgi kann nicht funktionieren, es fehlt der Content-type, die fehlende Zeile kannst Du aus der check.pl rauskopieren.

Gruß, Wolfgang
jens28
Posts: 5
Joined: 2004-02-29 17:46
 

Re: CGI :(

Post by jens28 »

hi wolfgang,
die scripts liegen alle im cgi-bin verzeichnis.

in der suxec.log steht :

Code: Select all

[2004-03-06 18:57:34]: info: (target/actual) uid: (web4/web4) gid: (ftponly/ftponly) cmd: sendmail.cgi
in dern warn steht nix was mit dem script zutun hat.

in der error.log habe ich das stehen:

Code: Select all

[Sat Mar  6 18:57:35 2004] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /srv/www/htdocs/web4/html/cgi-bin/sendmail.cgi
gruss
jens
wgot
Posts: 1675
Joined: 2003-07-06 02:03
 

Re: CGI :(

Post by wgot »

Hallo Jens,

ich glaub nicht, daß Du ein Problem mit dem Server hast, aber prüf mal folgendes:

in der httpd.conf sollte stehen:
AddHandler cgi-script .cgi .pl
eventuell fehlt das .pl

Auf der Konsole als Root:
suexec -V
interessant ist vor allem DOC_ROOT, sollte sein: /srv/www/htdocs
Und /usr/bin/perl ist sicher auch vorhanden.

Dann nimm mal ein ganz kleines Script:

Code: Select all

#!/usr/bin/perl
print "Content-type: text/htmlnnHallon";
-- eine Leerzeile am Dateiende --
Lade es per FTP hoch, FTP-Programm dabei auf ASCII stellen, anschließend die Größe vergleichen. Es muß auf dem Server kleiner sein als auf dem Windows-PC.
Setze das Script CHMOD 755 (mit dem FTP-Programm) und rufe es mit dem Browser auf.
Wenn es nicht funktioniert: Logfiles (access_log, error_log, suexec_log).

Gruß, Wolfgang
jens28
Posts: 5
Joined: 2004-02-29 17:46
 

Re: CGI :(

Post by jens28 »

hi wolfgang,

es funktioniert alles , habe mal nen anderes ftp-programm genommen und schon ging alles. :oops:


danke dir

gruss
jens
[/quote]
lhd
Posts: 5
Joined: 2004-03-18 02:28
Location: Herrenberg
 

Re: CGI :(

Post by lhd »

Hallo zusammen,

Ich versuche
http://people.ee.ethz.ch/~dws/software/mailgraph/ zum Laufen zu bringen. Leider gibt es die bekannten Probleme mit CGI
Macin wrote:Hallo,
...
also:
mv /srv/www/htdocs /srv/www/htdocs.alt
ln -sf /home/www /srv/www/htdocs
...
Grüsse Macin
Finde die Idee auch super,
Hat bei mir leider nicht funtkioniert.
Die Fehlermeldung hat sich von

Code: Select all

[2004-03-18 00:50:49]: info: (target/actual) uid: (web1/web1) gid: (ftponly/ftponly) cmd: mailgraph.cgi
[2004-03-18 00:50:49]: emerg: cannot get docroot information (/srv/www/htdocs)
verändert in:

Code: Select all

[2004-03-18 02:06:42]: info: (target/actual) uid: (web1/web1) gid: (ftponly/ftponly) cmd: mailgraph.cgi
[2004-03-18 02:06:42]: error: target uid/gid (636/101) mismatch with directory (636/8) or program (636/101)
Grund ist, dass ich wahrscheinlich jede möglich Komination von User/Group für /home & Co ausprobiert habe und jetzt alles verstellt ist und nicht mehr stimmt.

Kann jemand die "orginal" Besitzverhältnisse (owner/group) eines 1&1Rooties posten für folgende Verzeichnisse:

/home
/home/www
/srv
/srv/www
/srv/www/htdocs

Vielen Dank
Lars

PS. Eine Aufnahme in die FAQ wäre wünschenswert :-)
Das Forum und die FAQ sind trotzdem eine große Hilfe.
dodolin
Posts: 3840
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe
Contact:
 

Re: CGI :(

Post by dodolin »

[2004-03-18 02:06:42]: error: target uid/gid (636/101) mismatch with directory (636/8) or program (636/101)
Also, da steht doch alles, oder?! Dein Verzeichnis hat falsche Rechte, es sollte GID 101 haben. man chown bzw. chgrp
lhd
Posts: 5
Joined: 2004-03-18 02:28
Location: Herrenberg
 

Re: CGI :(

Post by lhd »

dodolin wrote: Also, da steht doch alles, oder?! Dein Verzeichnis hat falsche Rechte, es sollte GID 101 haben. man chown bzw. chgrp
Deswegen hätte ich ja gerne nochmal die User/Groups der entsprechenden Verzeichnisse damit ich wieder möglichst nahe an der Orginalzustand rankomme umd dann meine Ã?nderungen durchzuführen.

Vielen Dank
Lars
User avatar
Joe User
Project Manager
Project Manager
Posts: 11191
Joined: 2003-02-27 01:00
Location: Hamburg
Contact:
 

Re: CGI :(

Post by Joe User »

Warum quotest Du die Lösung Deines Problems, statt sie anzuwenden?

PS: Künftig bitte Artikel 5 Absatz 6 unserer Rules beachten, danke.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
dodolin
Posts: 3840
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe
Contact:
 

Re: CGI :(

Post by dodolin »

Deswegen hätte ich ja gerne nochmal die User/Groups der entsprechenden Verzeichnisse damit ich wieder möglichst nahe an der Orginalzustand rankomme umd dann meine Ã?nderungen durchzuführen.
Das ist Quatsch mit Soße.

Unter Windows mag es zwar vielleicht üblich sein, seine mysteriösen Probleme durch Neuinstallation zu lösen, unter Linux ist das aber nicht der Weg der Wahl, dafür gibt es doch dort gerade die ganzen Logfiles, damit man Probleme _systematisch_ angehen und lösen kann!
mng
Posts: 4
Joined: 2003-08-23 21:13
 

Re: CGI :(

Post by mng »

Die Lösung ist SEHR einfach:
1) suexec -V
2) das ausgegebene (falsche) docroot umbenennen mittels:
mv /srv/www/htdocs /srv/www/htdocs.alt
3) einen symbolischen link zum richtigen docroot erstellen:
ln -sf /home/htdocs /srv/www/htdocs

selbstverständlich müssen je nach umgebung die verzeichnisse entsprechend angepasst werden. innerhalb 30 sek. fertig :wink:
mng
Posts: 4
Joined: 2003-08-23 21:13
 

Re: CGI :(

Post by mng »

MNG wrote:Die Lösung ist SEHR einfach:
1) suexec -V
2) das ausgegebene (falsche) docroot umbenennen mittels:
mv /srv/www/htdocs /srv/www/htdocs.alt
3) einen symbolischen link zum richtigen docroot erstellen:
ln -sf /home/htdocs /srv/www/htdocs

selbstverständlich müssen je nach umgebung die verzeichnisse entsprechend angepasst werden. innerhalb 30 sek. fertig :wink:
mir ist aufgefallen das hat schonmal jemand gepostet *g*
wie auch immer, bei mir hats so wunderbar geklappt
antondollmaier
Posts: 485
Joined: 2004-03-30 10:06
 

Re: CGI :(

Post by antondollmaier »

oder:


apache mit dem richtigen suexec-document-root recompilieren ;)

is zwar mehr aufwand, aber dann isses sichriger ... :-D


mfg,
Anton
digitaljunkie
Posts: 11
Joined: 2004-04-28 14:28
 

Re: CGI :(

Post by digitaljunkie »

Hallo,

ich habe nen XL Rootserver mit Suse9 und Apache2 und wenn ich die spec-File editiert habe und nun eingeben will:

Code: Select all

p15xxxxxx:/# rpm -ba apache2.spec
-ba: unknown option
p15xxxxxx:/#
Also kennt der das Kommando gar nicht. Hat jetzt jemand eine Idee, wie ich meine entpackte und umkonfgurierte RPM installieren kann?

Merci im Vorraus!
compufix
Posts: 28
Joined: 2002-08-11 20:38
Location: Weilerbach
Contact:
 

Re: CGI :(

Post by compufix »

@MNG
danke für den TIPP, schnell, einfach und effizient :)

Gruß
compufix
Post Reply