You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by Keith Rautenbach <Ke...@isltd.insignia.com> on 1997/02/18 02:30:01 UTC

config/178: Module with server_config but no per-dir config will seggy in set_flag_slot.

>Number:         178
>Category:       config
>Synopsis:       Module with server_config but no per-dir config will seggy in set_flag_slot.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    gnats-admin (GNATS administrator)
>State:          open
>Class:          sw-bug
>Submitter-Id:   apache
>Arrival-Date:   Mon Feb 17 17:30:01 1997
>Originator:     Keith.Rautenbach@isltd.insignia.com
>Organization:
apache
>Release:        1.2b6
>Environment:
n/a
>Description:
Server crashes in set_flag_slot()
if module has server_config but no per-dir-config

dbx httpd 
Type 'help' for help.
reading symbolic information ...
(dbx) r  -X -d  /usr/local/httpd/ServerRoot

Segmentation fault in set_flag_slot at line 709 in file "http_config.c"
  709       *(int *)(struct_ptr + offset) = arg ? 1 : 0;
(dbx) t
set_flag_slot(cmd = 0x2ff22318, struct_ptr = (nil), arg = 0x1), line 709 in "http_config.c"
invoke_cmd(cmd = 0x20001b88, parms = 0x2ff22318, mconfig = (nil), args = ""), line 603 in "http_config.c"
unnamed block $b1, line 671 in "http_config.c"
handle_command(parms = 0x2ff22318, config = 0x20007960, l = "EnableLockDeletion On"), line 671 in "http_config.c"
unnamed block $b9, line 684 in "http_config.c"
srm_command_loop(parms = 0x2ff22318, config = 0x20007960), line 684 in "http_config.c"
process_resource_config(s = 0x20007030, fname = "/usr/local/httpd/ServerRoot/conf/access.conf", p = 0x20007008, ptemp = 0x20009028), line 764 in "http_config.c"
read_config(p = 0x20007008, ptemp = 0x20009028, confname = "conf/httpd.conf"), line 1074 in "http_config.c"
main(??, ??) at 0x100003b0
>How-To-Repeat:
Add following module:

#include "httpd.h"
#include "http_config.h"
#include "http_core.h"
#include "http_protocol.h"

module insignia_module;

typedef struct {
	int	enable_lock_delete;
} insignia_config_rec;


static void* insignia_create_svr_config( pool* p, server_rec* d )
{
	/*
	 * Set the defaults
	 */
	insignia_config_rec *rec = (insignia_config_rec*)
		pcalloc(p, sizeof(insignia_config_rec));

	rec->enable_lock_delete = 1;
	return(rec);
}


static command_rec insignia_commands[] = {
{ "EnableLockDeletion", set_flag_slot,
    (void*)XtOffsetOf(insignia_config_rec,enable_lock_delete), RSRC_CONF, FLAG, 
	" Deletion of lock; on/off"
 },
{ NULL }
};

module insignia_module = {
   STANDARD_MODULE_STUFF,
   NULL,			/* initializer */
   NULL,			/* dir config creater */
   NULL,			/* dir merger --- default is to override */
   insignia_create_svr_config,	/* server config */
   NULL,			/* merge server config */
   insignia_commands,		/* command table */
   NULL,			/* handlers */
   NULL,			/* filename translation */
   NULL,			/* check_user_id */
   NULL,			/* check auth */
   NULL,			/* check access */
   NULL,			/* type_checker */
   NULL,			/* fixups */
   NULL				/* logger */
};

and add to access.conf

	EnableLockDeletion On
>Fix:
I am using the following:

diff -C 5 http_config.{c,fix.c} 
*** http_config.c       Sun Jan 26 01:15:11 1997
--- http_config.fix.c   Tue Feb 18 01:14:14 1997
***************
*** 666,676 ****
                sconfig =
                    (*mod->create_server_config)(parms->pool, parms->server);
                set_module_config (parms->server->module_config, mod, sconfig);
            }
            
!           retval = invoke_cmd (cmd, parms, mconfig, args);
            mod = mod->next;    /* Next time around, skip this one */
        }
      } while (retval && !strcmp(retval, DECLINE_CMD));
  
      return retval;
--- 666,676 ----
                sconfig =
                    (*mod->create_server_config)(parms->pool, parms->server);
                set_module_config (parms->server->module_config, mod, sconfig);
            }
            
!           retval = invoke_cmd (cmd, parms, mconfig ? mconfig: sconfig, args);
            mod = mod->next;    /* Next time around, skip this one */
        }
      } while (retval && !strcmp(retval, DECLINE_CMD));
  
      return retval;
%0
>Audit-Trail:
>Unformatted: