Commit 46743ddb authored by Jim Jagielski's avatar Jim Jagielski
Browse files

Tag HEAD of 2.2.x as 2.2.25


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/tags/2.2.25@1774654 13f79535-47bb-0310-9956-ffa450edef68
parent c7b0c14b
Loading
Loading
Loading
Loading

2.4.x/.gdbinit

deleted100644 → 0
+0 −393
Original line number Diff line number Diff line
# gdb macros which may be useful for folks using gdb to debug
# apache.  Delete it if it bothers you.

define dump_table
    set $t = (apr_table_entry_t *)((apr_array_header_t *)$arg0)->elts
    set $n = ((apr_array_header_t *)$arg0)->nelts
    set $i = 0
    while $i < $n
	if $t[$i].val == (void *)0L
	   printf "[%u] '%s'=>NULL\n", $i, $t[$i].key
	else
	   printf "[%u] '%s'='%s' [%p]\n", $i, $t[$i].key, $t[$i].val, $t[$i].val
	end
	set $i = $i + 1
    end
end
document dump_table
    Print the key/value pairs in a table.
end

define dump_string_hash
    set $h = $arg0->array
    set $n = $arg0->max
    set $i = 0
    while $i < $n
        set $ent = $h[$i]       
        while $ent != (void *)0L
            printf "'%s' => '%p'\n", $ent->key, $ent->val
            set $ent = $ent->next
        end
	set $i = $i + 1
    end
end
document dump_string_hash
    Print the entries in a hash table indexed by strings
end

define dump_string_shash
    set $h = $arg0->array
    set $n = $arg0->max
    set $i = 0
    while $i < $n
        set $ent = $h[$i]       
        while $ent != (void *)0L
            printf "'%s' => '%s'\n", $ent->key, $ent->val
            set $ent = $ent->next
        end
	set $i = $i + 1
    end
end
document dump_string_shash
    Print the entries in a hash table indexed by strings with string values
end

define ro
	run -DONE_PROCESS
end

define dump_string_array
    set $a = (char **)((apr_array_header_t *)$arg0)->elts
    set $n = (int)((apr_array_header_t *)$arg0)->nelts
    set $i = 0
    while $i < $n
	printf "[%u] '%s'\n", $i, $a[$i]
	set $i = $i + 1
    end
end
document dump_string_array
    Print all of the elements in an array of strings.
end

define printmemn
    set $i = 0
    while $i < $arg1
        if $arg0[$i] < 0x20 || $arg0[$i] > 0x7e
            printf "~"
        else
            printf "%c", $arg0[$i]
        end
        set $i = $i + 1
    end
end

define print_bkt_datacol
    # arg0 == column name
    # arg1 == format
    # arg2 == value
    # arg3 == suppress header?
    set $suppressheader = $arg3

    if !$suppressheader
        printf " "
        printf $arg0
        printf "="
    else
        printf " | "
    end
    printf $arg1, $arg2
end

define dump_bucket_ex
    # arg0 == bucket
    # arg1 == suppress header?
    set $bucket = (struct apr_bucket *)$arg0
    set $sh = $arg1
    set $refcount = -1

    print_bkt_datacol "bucket" "%-9s" $bucket->type->name $sh
    printf "(0x%08lx)", (unsigned long)$bucket
    print_bkt_datacol "length" "%-6ld" (long)($bucket->length) $sh
    print_bkt_datacol "data" "0x%08lx" $bucket->data $sh

    if !$sh
        printf "\n    "
    end

    if (($bucket->type == &apr_bucket_type_eos)   || \
        ($bucket->type == &apr_bucket_type_flush))

        # metadata buckets, no content
        print_bkt_datacol "contents" "%c" ' ' $sh
        printf "                     "
        print_bkt_datacol "rc" "n/%c" 'a' $sh

    else
    if ($bucket->type == &ap_bucket_type_error)

        # metadata bucket, no content but it does have an error code in it
        print_bkt_datacol "contents" "%c" ' ' $sh
        set $status = ((ap_bucket_error *)$bucket->data)->status
        printf " (status=%3d)        ", $status
        print_bkt_datacol "rc" "n/%c" 'a' $sh

    else
    if (($bucket->type == &apr_bucket_type_file) || \
        ($bucket->type == &apr_bucket_type_pipe) || \
        ($bucket->type == &apr_bucket_type_socket))

        # buckets that contain data not in memory (ie not printable)

        print_bkt_datacol "contents" "[**unprintable**%c" ']' $sh
        printf "     "
        if $bucket->type == &apr_bucket_type_file
            set $refcount = ((apr_bucket_refcount *)$bucket->data)->refcount
            print_bkt_datacol "rc" "%d" $refcount $sh
        end

    else
    if (($bucket->type == &apr_bucket_type_heap)      || \
        ($bucket->type == &apr_bucket_type_pool)      || \
        ($bucket->type == &apr_bucket_type_mmap)      || \
        ($bucket->type == &apr_bucket_type_transient) || \
        ($bucket->type == &apr_bucket_type_immortal))

        # in-memory buckets

        if $bucket->type == &apr_bucket_type_heap
            set $refcount = ((apr_bucket_refcount *)$bucket->data)->refcount
            set $p = (apr_bucket_heap *)$bucket->data
            set $data = $p->base+$bucket->start

        else
        if $bucket->type == &apr_bucket_type_pool
            set $refcount = ((apr_bucket_refcount *)$bucket->data)->refcount
            set $p = (apr_bucket_pool *)$bucket->data
            if !$p->pool
                set $p = (apr_bucket_heap *)$bucket->data
            end
            set $data = $p->base+$bucket->start

        else
        if $bucket->type == &apr_bucket_type_mmap
            # is this safe if not APR_HAS_MMAP?
            set $refcount = ((apr_bucket_refcount *)$bucket->data)->refcount
            set $p = (apr_bucket_mmap *)$bucket->data
            set $data = ((char *)$p->mmap->mm)+$bucket->start

        else
        if (($bucket->type == &apr_bucket_type_transient) || \
            ($bucket->type == &apr_bucket_type_immortal))
            set $data = ((char *)$bucket->data)+$bucket->start

        end
        end
        end
        end

        if $sh
            printf " | ["
        else
            printf " contents=["
        end
        set $datalen = $bucket->length
        if $datalen > 17
            printmem $data 17
            printf "..."
            set $datalen = 20
        else
            printmemn $data $datalen
        end
        printf "]"
        while $datalen < 20
            printf " "
            set $datalen = $datalen + 1
        end

        if $refcount != -1
            print_bkt_datacol "rc" "%d" $refcount $sh
        else
            print_bkt_datacol "rc" "n/%c" 'a' $sh
        end

    else
        # 3rd-party bucket type
        print_bkt_datacol "contents" "[**unknown**%c" ']' $sh
        printf "         "
        print_bkt_datacol "rc" "n/%c" 'a' $sh
    end
    end
    end
    end

    printf "\n"

end

define dump_bucket
    dump_bucket_ex $arg0 0
end
document dump_bucket
    Print bucket info
end

define dump_brigade
    set $bb = (apr_bucket_brigade *)$arg0
    set $bucket = $bb->list.next
    set $sentinel = ((char *)((&($bb->list)) \
                               - ((size_t) &((struct apr_bucket *)0)->link)))
    printf "dump of brigade 0x%lx\n", (unsigned long)$bb

    printf "   | type     (address)    | length | "
    printf "data addr  | contents               | rc\n"
    printf "----------------------------------------"
    printf "----------------------------------------\n"

    if $bucket == $sentinel
        printf "brigade is empty\n"
    end

    set $j = 0
    while $bucket != $sentinel
        printf "%2d", $j
        dump_bucket_ex $bucket 1
        set $j = $j + 1
        set $bucket = $bucket->link.next
    end
    printf "end of brigade\n"
end
document dump_brigade
    Print bucket brigade info
end

define dump_filters
    set $f = $arg0
    while $f
        printf "%s(0x%lx): ctx=0x%lx, r=0x%lx, c=0x%lx\n", \
        $f->frec->name, (unsigned long)$f, (unsigned long)$f->ctx, \
        $f->r, $f->c
        set $f = $f->next
    end
end
document dump_filters
    Print filter chain info
end

define dump_filter_chain
    set $r = $arg0
    set $f = $r->output_filters
    while $f
        if $f == $r->output_filters
            printf "r->output_filters =>\n"
        end
        if $f == $r->proto_output_filters
            printf "r->proto_output_filters =>\n"
        end
        if $f == $r->connection->output_filters
            printf "r->connection->output_filters =>\n"
        end
        
        printf "  %s(0x%lx): type=%d, ctx=0x%lx, r=%s(0x%lx), c=0x%lx\n", \
          $f->frec->name, (unsigned long)$f, $f->frec->ftype, (unsigned long)$f->ctx, \
          $f->r == $r ? "r" : ($f->r == 0L ? "null" : \
          ($f->r == $r->main ? "r->main" :  \
          ($r->main && $f->r == $r->main->main ? "r->main->main" : "????"))), \
          $f->r, $f->c

        set $f = $f->next
    end
end
document dump_filter_chain
    Print filter chain info given a request_rec pointer
end

define dump_process_rec
    set $p = $arg0
    printf "process_rec=0x%lx:\n", (unsigned long)$p
    printf "   pool=0x%lx, pconf=0x%lx\n", \
           (unsigned long)$p->pool, (unsigned long)$p->pconf
end
document dump_process_rec
    Print process_rec info
end

define dump_server_rec
    set $s = $arg0
    printf "name=%s:%d\n", \
            $s->server_hostname, $s->port
    dump_process_rec($s->process)
end
document dump_server_rec
    Print server_rec info
end

define dump_servers
    set $s = $arg0
    while $s
        dump_server_rec($s)
        printf "\n"
        set $s = $s->next
    end
end
document dump_servers
    Print server_rec list info
end

define dump_request_tree
    set $r = $arg0
    set $i
    while $r
        printf "r=(0x%lx): uri=%s, handler=%s, r->main=0x%lx\n", \
          $r, $r->unparsed_uri, $r->handler ? $r->handler : "(none)", $r->main
        set $r = $r->main
    end
end        

define dump_allocator
    printf "Allocator current_free_index = %d, max_free_index = %d\n", \
            ($arg0)->current_free_index, ($arg0)->max_free_index
    printf "Allocator free list:\n"
    set $i = 0
    set $max =(sizeof $arg0->free)/(sizeof $arg0->free[0])
    set $kb = 0
    while $i < $max
        set $node = $arg0->free[$i]
        if $node != 0
            printf " #%2d: ", $i
            while $node != 0
                printf "%d, ", 4096 << $node->index
                set $kb = $kb + (4 << $node->index)
                set $node = $node->next
            end
            printf "ends.\n"
        end
        set $i = $i + 1
    end
    printf "Sum of free blocks: %dkiB\n", $kb
end
document dump_allocator
    Print status of an allocator and its freelists.
end

define dump_one_pool
    set $p = $arg0
    set $size = 0
    set $free = 0
    set $nodes = 0
    set $node = $arg0->active
    set $done = 0
    while $done == 0
        set $size = $size + (4096 << $node->index)
        set $free = $free + ($node->endp - $node->first_avail)
        set $nodes = $nodes + 1
        set $node = $node->next
        if $node == $arg0->active
            set $done = 1
        end
    end
    printf "Pool '%s' [%p]: %d/%d free (%d blocks)\n", $p->tag, $p, $free, $size, $nodes
end

# Set sane defaults for common signals:
handle SIGPIPE noprint pass nostop
handle SIGUSR1 print pass nostop

2.4.x/ABOUT_APACHE

deleted100644 → 0
+0 −244
Original line number Diff line number Diff line

                     The Apache HTTP Server Project

                        http://httpd.apache.org/

The Apache HTTP Server Project is a collaborative software development effort
aimed at creating a robust, commercial-grade, featureful, and freely-available
source code implementation of an HTTP (Web) server. The project is jointly 
managed by a group of volunteers located around the world, using the Internet
and the Web to communicate, plan, and develop the server and its related 
documentation. In addition, hundreds of users have contributed ideas, code, 
and documentation to the project.

This file is intended to briefly describe the history of the Apache Group (as 
it was called in the early days), recognize the many contributors, and explain
how you can join the fun too.

In February of 1995, the most popular server software on the Web was the
public domain HTTP daemon developed by Rob McCool at the National Center
for Supercomputing Applications, University of Illinois, Urbana-Champaign.
However, development of that httpd had stalled after Rob left NCSA in
mid-1994, and many webmasters had developed their own extensions and bug
fixes that were in need of a common distribution. A small group of these
webmasters, contacted via private e-mail, gathered together for the purpose
of coordinating their changes (in the form of "patches"). Brian Behlendorf
and Cliff Skolnick put together a mailing list, shared information space,
and logins for the core developers on a machine in the California Bay Area,
with bandwidth and diskspace donated by HotWired and Organic Online.
By the end of February, eight core contributors formed the foundation
of the original Apache Group:

   Brian Behlendorf        Roy T. Fielding          Rob Hartill
   David Robinson          Cliff Skolnick           Randy Terbush
   Robert S. Thau          Andrew Wilson

with additional contributions from

   Eric Hagberg            Frank Peters             Nicolas Pioch

Using NCSA httpd 1.3 as a base, we added all of the published bug fixes
and worthwhile enhancements we could find, tested the result on our own
servers, and made the first official public release (0.6.2) of the Apache
server in April 1995. By coincidence, NCSA restarted their own development
during the same period, and Brandon Long and Beth Frank of the NCSA Server
Development Team joined the list in March as honorary members so that the
two projects could share ideas and fixes.

The early Apache server was a big hit, but we all knew that the codebase
needed a general overhaul and redesign. During May-June 1995, while
Rob Hartill and the rest of the group focused on implementing new features
for 0.7.x (like pre-forked child processes) and supporting the rapidly growing
Apache user community, Robert Thau designed a new server architecture
(code-named Shambhala) which included a modular structure and API for better
extensibility, pool-based memory allocation, and an adaptive pre-forking
process model. The group switched to this new server base in July and added
the features from 0.7.x, resulting in Apache 0.8.8 (and its brethren)
in August.

After extensive beta testing, many ports to obscure platforms, a new set
of documentation (by David Robinson), and the addition of many features
in the form of our standard modules, Apache 1.0 was released on
December 1, 1995.

Less than a year after the group was formed, the Apache server passed
NCSA's httpd as the #1 server on the Internet.

The survey by Netcraft (http://www.netcraft.com/survey/) shows that Apache
is today more widely used than all other web servers combined.

 ============================================================================

The current project management committe of the Apache HTTP Server
project (as of March, 2011) is:

    Aaron Bannert       André Malo              Astrid Stolper
    Ben Laurie          Bojan Smojver           Brad Nicholes
    Brian Havard        Brian McCallister       Chris Darroch
    Chuck Murcko        Colm MacCárthaigh       Dan Poirier
    Dirk-Willem van Gulik                       Doug MacEachern     
    Eric Covener        Erik Abele              Graham Dumpleton    
    Graham Leggett      Greg Ames               Greg Stein 
    Gregory Trubetskoy  Guenter Knauf           Issac Goldstand     
    Jeff Trawick        Jim Gallacher           Jim Jagielski      
    Joe Orton           Joe Schaefer            Joshua Slive
    Justin Erenkrantz   Ken Coar                Lars Eilebrecht
    Manoj Kasichainula  Marc Slemko             Mark J. Cox
    Martin Kraemer      Maxime Petazzoni        Nick Kew
    Nicolas Lehuen      Noirin Shirley          Paul Querna
    Philip M. Gollucci  Ralf S. Engelschall     Randy Kobes
    Rasmus Lerdorf      Rich Bowen              Roy T. Fielding
    Rüdiger Plüm        Sander Striker          Sander Temm
    Stefan Fritsch      Tony Stevenson          Victor J. Orlikowski
    Wilfredo Sanchez    William A. Rowe Jr.     Yoshiki Hayashi     

Other major contributors

   Howard Fear (mod_include), Florent Guillaume (language negotiation),
   Koen Holtman (rewrite of mod_negotiation),
   Kevin Hughes (creator of all those nifty icons),
   Brandon Long and Beth Frank (NCSA Server Development Team, post-1.3),
   Ambarish Malpani (Beginning of the NT port),
   Rob McCool (original author of the NCSA httpd 1.3),
   Paul Richards (convinced the group to use remote CVS after 1.0),
   Garey Smiley (OS/2 port), Henry Spencer (author of the regex library).

Many 3rd-party modules, frequently used and recommended, are also
freely-available and linked from the related projects page:
<http://modules.apache.org/>, and their authors frequently
contribute ideas, patches, and testing.

Hundreds of people have made individual contributions to the Apache
project. Patch contributors are listed in the CHANGES file.

 ============================================================================

How to become involved in the Apache project

There are several levels of contributing. If you just want to send
in an occasional suggestion/fix, then you can just use the bug reporting
form at <http://httpd.apache.org/bug_report.html>. You can also subscribe
to the announcements mailing list (announce-subscribe@httpd.apache.org) which
we use to broadcast information about new releases, bugfixes, and upcoming
events. There's a lot of information about the development process (much of
it in serious need of updating) to be found at <http://httpd.apache.org/dev/>.

If you'd like to become an active contributor to the Apache project (the
group of volunteers who vote on changes to the distributed server), then
you need to start by subscribing to the dev@httpd.apache.org mailing list.
One warning though: traffic is high, 1000 to 1500 messages/month.
To subscribe to the list, send an email to dev-subscribe@httpd.apache.org.
We recommend reading the list for a while before trying to jump in to 
development.

   NOTE: The developer mailing list (dev@httpd.apache.org) is not
   a user support forum; it is for people actively working on development
   of the server code and documentation, and for planning future
   directions. If you have user/configuration questions, send them
   to users list <http://httpd.apache.org/userslist> or to the USENET
   newsgroup "comp.infosystems.www.servers.unix".or for windows users,
   the newsgroup "comp.infosystems.www.servers.ms-windows".

There is a core group of contributors (informally called the "core")
which was formed from the project founders and is augmented from time
to time when core members nominate outstanding contributors and the
rest of the core members agree. The core group focus is more on
"business" issues and limited-circulation things like security problems
than on mainstream code development. The term "The Apache Group"
technically refers to this core of project contributors.

The Apache project is a meritocracy--the more work you have done, the more
you are allowed to do. The group founders set the original rules, but
they can be changed by vote of the active members. There is a group
of people who have logins on our server (apache.org) and access to the
svn repository.  Everyone has access to the svn snapshots.  Changes to
the code are proposed on the mailing list and usually voted on by active
members--three +1 (yes votes) and no -1 (no votes, or vetoes) are needed
to commit a code change during a release cycle; docs are usually committed
first and then changed as needed, with conflicts resolved by majority vote.

Our primary method of communication is our mailing list. Approximately 40
messages a day flow over the list, and are typically very conversational in
tone. We discuss new features to add, bug fixes, user problems, developments
in the web server community, release dates, etc. The actual code development
takes place on the developers' local machines, with proposed changes
communicated using a patch (output of a unified "diff -u oldfile newfile"
command), and committed to the source repository by one of the core
developers using remote svn.  Anyone on the mailing list can vote on a
particular issue, but we only count those made by active members or people
who are known to be experts on that part of the server. Vetoes must be
accompanied by a convincing explanation.

New members of the Apache Group are added when a frequent contributor is
nominated by one member and unanimously approved by the voting members.
In most cases, this "new" member has been actively contributing to the
group's work for over six months, so it's usually an easy decision.

The above describes our past and current (as of July 2000) guidelines,
which will probably change over time as the membership of the group
changes and our development/coordination tools improve.

 ============================================================================

The Apache Software Foundation (www.apache.org)

The Apache Software Foundation exists to provide organizational, legal,
and financial support for the Apache open-source software projects.
Founded in June 1999 by the Apache Group, the Foundation has been
incorporated as a membership-based, not-for-profit corporation in order
to ensure that the Apache projects continue to exist beyond the participation
of individual volunteers, to enable contributions of intellectual property
and funds on a sound basis, and to provide a vehicle for limiting legal
exposure while participating in open-source software projects. 

You are invited to participate in The Apache Software Foundation. We welcome
contributions in many forms. Our membership consists of those individuals
who have demonstrated a commitment to collaborative open-source software
development through sustained participation and contributions within the
Foundation's projects. Many people and companies have contributed towards
the success of the Apache projects. 

 ============================================================================

Why The Apache HTTP Server Is Free

Apache HTTP Server exists to provide a robust and commercial-grade reference
implementation of the HTTP protocol. It must remain a platform upon which
individuals and institutions can build reliable systems, both for
experimental purposes and for mission-critical purposes. We believe the
tools of online publishing should be in the hands of everyone, and
software companies should make their money providing value-added services
such as specialized modules and support, amongst other things. We realize
that it is often seen as an economic advantage for one company to "own" a
market - in the software industry that means to control tightly a
particular conduit such that all others must pay. This is typically done
by "owning" the protocols through which companies conduct business, at the
expense of all those other companies. To the extent that the protocols of
the World Wide Web remain "unowned" by a single company, the Web will
remain a level playing field for companies large and small. Thus,
"ownership" of the protocol must be prevented, and the existence of a
robust reference implementation of the protocol, available absolutely for
free to all companies, is a tremendously good thing. 

Furthermore, Apache httpd is an organic entity; those who benefit from it
by using it often contribute back to it by providing feature enhancements,
bug fixes, and support for others in public newsgroups. The amount of
effort expended by any particular individual is usually fairly light, but
the resulting product is made very strong. This kind of community can
only happen with freeware--when someone pays for software, they usually
aren't willing to fix its bugs. One can argue, then, that Apache's
strength comes from the fact that it's free, and if it were made "not
free" it would suffer tremendously, even if that money were spent on a
real development team.

We want to see Apache httpd used very widely--by large companies, small
companies, research institutions, schools, individuals, in the intranet
environment, everywhere--even though this may mean that companies who
could afford commercial software, and would pay for it without blinking,
might get a "free ride" by using Apache httpd. We would even be happy if 
some commercial software companies completely dropped their own HTTP server
development plans and used Apache httpd as a base, with the proper attributions
as described in the LICENSE file.

Thanks for using Apache HTTP Server!

2.4.x/Apache-apr2.dsw

deleted100644 → 0
+0 −3018

File deleted.

Preview size limit exceeded, changes collapsed.

2.4.x/Apache.dsw

deleted100644 → 0
+0 −3544

File deleted.

Preview size limit exceeded, changes collapsed.

2.4.x/BuildAll.dsp

deleted100644 → 0
+0 −97

File deleted.

Preview size limit exceeded, changes collapsed.

Loading