Skip to content

Instantly share code, notes, and snippets.

@Freeaqingme
Last active April 22, 2017 15:36
Show Gist options
  • Select an option

  • Save Freeaqingme/b2a7b452c22f8e8a95e898751308c478 to your computer and use it in GitHub Desktop.

Select an option

Save Freeaqingme/b2a7b452c22f8e8a95e898751308c478 to your computer and use it in GitHub Desktop.

Revisions

  1. Freeaqingme revised this gist Apr 22, 2017. 1 changed file with 21 additions and 3 deletions.
    24 changes: 21 additions & 3 deletions libmodsecurity.go
    Original file line number Diff line number Diff line change
    @@ -12,6 +12,7 @@ char main_rule_uri[] = "basic_rules.conf";
    int foobar ()
    {
    int ret;
    ModSecurity *modsec = NULL;
    Transaction *transaction = NULL;
    Rules *rules = NULL;
    @@ -20,20 +21,37 @@ int foobar ()
    rules = msc_create_rules_set();
    const char *error = NULL;
    msc_rules_add_file(rules, main_rule_uri, &error);
    if (error != 0) {
    ret = msc_rules_add_file(rules, main_rule_uri, &error);
    if (ret < 0) {
    fprintf(stderr, "Problems loading the rules --\n");
    fprintf(stderr, "%s\n", error);
    return *error;
    }
    transaction = msc_new_transaction(modsec, rules, NULL);
    msc_process_connection(transaction, "127.0.0.1", 80, "127.0.0.1", 80);
    msc_process_uri(transaction, "http://www.modsecurity.org/test?key1=value1&key2=value2&key3=value3&test=args&test=test", "GET", "1.1");
    //msc_process_uri(transaction, "http://www.modsecurity.org/test?key1=value1&key2=value2&key3=value3&test=args&test=test", "GET", "1.1");
    msc_process_uri(transaction, "http://www.modsecurity.org/test?key1=value1&key2=value2&key3=value3&test=args&test=test", "CONNECT", "1.1");
    msc_process_request_headers(transaction);
    msc_process_request_body(transaction);
    msc_process_response_headers(transaction, 200, "HTTP 1.!");
    msc_process_response_body(transaction);
    ModSecurityIntervention intervention;
    intervention.status = 200;
    intervention.url = NULL;
    intervention.log = NULL;
    intervention.disruptive = 0;
    if (msc_intervention(transaction, &intervention) == 0) {
    fprintf(stderr, "No intervention required!\n");
    return 0;
    } else {
    fprintf(stderr, "We should intervene...!\n");
    }
    return 0;
    }
  2. Freeaqingme created this gist Apr 22, 2017.
    49 changes: 49 additions & 0 deletions libmodsecurity.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,49 @@
    package main

    /*
    #cgo CPPFLAGS: -I/usr/local/modsecurity/include
    #cgo LDFLAGS: /usr/local/modsecurity/lib/libmodsecurity.so
    #include "modsecurity/modsecurity.h"
    #include "modsecurity/transaction.h"
    #include "modsecurity/rules.h"
    char main_rule_uri[] = "basic_rules.conf";
    int foobar ()
    {
    ModSecurity *modsec = NULL;
    Transaction *transaction = NULL;
    Rules *rules = NULL;
    modsec = msc_init();
    rules = msc_create_rules_set();
    const char *error = NULL;
    msc_rules_add_file(rules, main_rule_uri, &error);
    if (error != 0) {
    return *error;
    }
    transaction = msc_new_transaction(modsec, rules, NULL);
    msc_process_connection(transaction, "127.0.0.1", 80, "127.0.0.1", 80);
    msc_process_uri(transaction, "http://www.modsecurity.org/test?key1=value1&key2=value2&key3=value3&test=args&test=test", "GET", "1.1");
    msc_process_request_headers(transaction);
    msc_process_request_body(transaction);
    msc_process_response_headers(transaction, 200, "HTTP 1.!");
    msc_process_response_body(transaction);
    return 0;
    }
    */
    import "C"

    import (
    "fmt"
    )

    func main() {
    fmt.Println(C.foobar())
    }