ubuntu problem detected [Apache2 CGI C++]

Iniciado por xkiz ™, 18 Octubre 2014, 19:01 PM

0 Miembros y 1 Visitante están viendo este tema.

xkiz ™

No se donde poner este post, por que no se de donde viene el problema, si es de ubuntu, de apache2 o de algun error en CGI C++, asi que muévanlo a donde crean que vaya.


estoy intentando hacer algo en CGI C++, y como no se ni J, estoy investigando, googleando tutoriales y demsas cosas...
me tope con este tutorial; http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CGI.html (Example, no llegue a Debugging)
compile las librerias cgi y funciona como tendria que, al reiniciar la pc hoy, me aparecio un popup de ubuntu problem detected, al ir a info tiro que lo que lo que ocaciono el problema estaba en /usr/lib/cgi-bin/testcgi, el cgi que habia creado con el tutorial,  lo que me pareció raro por que todo funcionaba bien, hasta que vi que si llamo aal cgi directamente: "localhost/cgi-bin/testcgi" aparece esto:



lo cual apunta al cgi, pero no logro darme cuenta donde esta el error.
tampoco se porque aparece ese error al iniciar el sistema.


OS: ubuntu 14.04 x64
Apache2: Apache/2.4.7 (Ubuntu)
CGI Librerias ver:  3.2.9



Edito:
si ejecuto el cgi desde terminal me devuelve esto:


root@ubuntu:/usr/lib/cgi-bin# ./testcgi
Content-Type: text/html


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html lang="EN" dir="LTR" >
</html><head><title>Cgicc example</title></head>
<body bgcolor="#cccccc" text="#000000" link="#0000ff" vlink="#000080" >
<h1>This is a demonstration of the GNU CgiCC library</h1>
Violación de segmento (`core' generado)


Eternal Idol

El programa testcgi tiene un bug, deberias depurarlo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

xkiz ™

#2
nunca le agarre la mano a C++, es mas C++ se aleja cada vez que quiero...

despues de prueba y errores, lgre hacer que no crashee mas al ejecutarlo directamente, sin provenir desde el html que enviaba el POST, ahora no se si esta bien o mal, o si me va a joder por otro lado:

Código (cpp) [Seleccionar]

#include <iostream>
#include <vector>
#include <string>

#include "cgicc/CgiDefs.h"
#include "cgicc/Cgicc.h"
#include "cgicc/HTTPHTMLHeader.h"
#include "cgicc/HTMLClasses.h"

#include <stdio.h>
#include <stdlib.h>

using namespace std;
using namespace cgicc;     // Or reference as cgicc::Cgicc formData; below in object instantiation.

int main(int argc, char *argv[])
{
try {
Cgicc formData;
   
// Send HTTP header: Content-type: text/html
cout << HTTPHTMLHeader() << endl;
// Print: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
cout << HTMLDoctype(HTMLDoctype::eStrict) << endl;
// Print: <html lang="en" dir="LTR">
cout << html().set("lang", "EN").set("dir", "LTR") << endl;
   
// Set up the HTML document
cout << html() << head() << title("Cgicc example") << head() << endl;
cout << body().set("bgcolor","#cccccc").set("text","#000000").set("link","#0000ff").set("vlink","#000080") << endl;
   
cout << h1("This is a demonstration of the GNU CgiCC library") << endl;
char *str = getenv("QUERY_STRING");

if(str != NULL){
free(str);
form_iterator fvalue1 = formData.getElement("value1");
if( !fvalue1->isEmpty() && fvalue1 != (*formData).end()) {
cout << "Value1: " << **fvalue1 << endl;
}else{
cout << "No text entered for value1" << endl;
}

cout << p();

form_iterator fvalue2 = formData.getElement("value2");

if( !fvalue2->isEmpty() && fvalue2 != (*formData).end()) {
// Note this is just a different way to access the string class.
// See the YoLinux GNU string class tutorial.
cout << "Value2: " << (**fvalue2).c_str() << endl;
}

cout << p();

form_iterator fvalue3 = formData.getElement("value3");
if( !fvalue3->isEmpty() && fvalue3 != (*formData).end()) {
cout << "Value3: " << **fvalue3 << endl;
   }

   cout << p();

   form_iterator fvalue4 = formData.getElement("value4");
   if( !fvalue4->isEmpty() && fvalue4 != (*formData).end()) {
    cout << "Value4: " << **fvalue4 << endl;
   }

}// mio

       // Close the HTML document
cout << body() << endl;
cout <<  html() << endl;
    }
    catch(exception& e) {
       // handle any errors here.
cout << "ERROR!!" << endl;
return 0;

    }
   
    return 0;   // To avoid Apache errors.
}



hasta ahora solo es el mismo cpp del ejemplo.

con lo que hice que no tire mas errores fue con lo de getenv("QUERY_STRING") y el f(str != NULL), pero no se si es la forma correcta...