summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-05-27 07:14:01 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:17:05 -0500
commitab78cc9dcaff48fd314a80d24907abb64990ffd7 (patch)
tree1cc0c7e7104265172915c408c1965dc0d3a56edb
parent7c64c914689b582d3d4af72a9b0437629c440b4f (diff)
downloadsamba-ab78cc9dcaff48fd314a80d24907abb64990ffd7.tar.gz
samba-ab78cc9dcaff48fd314a80d24907abb64990ffd7.tar.xz
samba-ab78cc9dcaff48fd314a80d24907abb64990ffd7.zip
r7008: - split out the loadparm type definitions so loadparm internals can be accessed externally
- moved esp_lpGet() to web_server/calls.c - attempt to fixup ejs build with includes.h again (This used to be commit 592a81c347981420154ddf3b8d4252d3bb08bc86)
-rw-r--r--source4/param/loadparm.c183
-rw-r--r--source4/param/loadparm.h60
-rw-r--r--source4/web_server/calls.c106
-rw-r--r--source4/web_server/ejs/miniMpr.c2
-rw-r--r--source4/web_server/ejs/miniMpr.h10
5 files changed, 199 insertions, 162 deletions
diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c
index ceb73e9958..af9c30d80e 100644
--- a/source4/param/loadparm.c
+++ b/source4/param/loadparm.c
@@ -63,7 +63,7 @@
#include "librpc/gen_ndr/ndr_samr.h"
#include "librpc/gen_ndr/ndr_nbt.h"
#include "dlinklist.h"
-#include "web_server/esp/esp.h"
+#include "param/loadparm.h"
BOOL in_client = False; /* Not in the client by default */
static BOOL bLoaded = False;
@@ -103,39 +103,6 @@ static BOOL defaults_saved = False;
#define FLAG_CMDLINE 0x8000 /* this option was set from the command line */
-/* the following are used by loadparm for option lists */
-typedef enum
-{
- P_BOOL,P_INTEGER,P_LIST,P_STRING,P_USTRING,P_ENUM,P_SEP
-} parm_type;
-
-typedef enum
-{
- P_LOCAL,P_GLOBAL,P_SEPARATOR,P_NONE
-} parm_class;
-
-struct enum_list {
- int value;
- const char *name;
-};
-
-struct parm_struct
-{
- const char *label;
- parm_type type;
- parm_class class;
- void *ptr;
- BOOL (*special)(const char *, char **);
- const struct enum_list *enum_list;
- uint_t flags;
- union {
- BOOL bvalue;
- int ivalue;
- char *svalue;
- char cvalue;
- const char **lvalue;
- } def;
-};
struct param_opt {
@@ -1347,7 +1314,7 @@ static void init_copymap(service * pservice);
/* This is a helper function for parametrical options support. */
/* It returns a pointer to parametrical option value if it exists or NULL otherwise */
/* Actual parametrical functions are quite simple */
-static const char *get_parametrics(int lookup_service, const char *type, const char *option)
+const char *lp_get_parametric(int lookup_service, const char *type, const char *option)
{
char *vfskey;
struct param_opt *data;
@@ -1442,7 +1409,7 @@ static BOOL lp_bool(const char *s)
const char *lp_parm_string(int lookup_service, const char *type, const char *option)
{
- const char *value = get_parametrics(lookup_service, type, option);
+ const char *value = lp_get_parametric(lookup_service, type, option);
if (value)
return lp_string(value);
@@ -1457,7 +1424,7 @@ const char *lp_parm_string(int lookup_service, const char *type, const char *opt
const char **lp_parm_string_list(int lookup_service, const char *type, const char *option,
const char *separator)
{
- const char *value = get_parametrics(lookup_service, type, option);
+ const char *value = lp_get_parametric(lookup_service, type, option);
if (value)
return str_list_make(talloc_autofree_context(), value, separator);
@@ -1470,7 +1437,7 @@ const char **lp_parm_string_list(int lookup_service, const char *type, const cha
int lp_parm_int(int lookup_service, const char *type, const char *option, int default_v)
{
- const char *value = get_parametrics(lookup_service, type, option);
+ const char *value = lp_get_parametric(lookup_service, type, option);
if (value)
return lp_int(value);
@@ -1483,7 +1450,7 @@ int lp_parm_int(int lookup_service, const char *type, const char *option, int de
unsigned long lp_parm_ulong(int lookup_service, const char *type, const char *option, unsigned long default_v)
{
- const char *value = get_parametrics(lookup_service, type, option);
+ const char *value = lp_get_parametric(lookup_service, type, option);
if (value)
return lp_ulong(value);
@@ -1496,7 +1463,7 @@ unsigned long lp_parm_ulong(int lookup_service, const char *type, const char *op
BOOL lp_parm_bool(int lookup_service, const char *type, const char *option, BOOL default_v)
{
- const char *value = get_parametrics(lookup_service, type, option);
+ const char *value = lp_get_parametric(lookup_service, type, option);
if (value)
return lp_bool(value);
@@ -1781,6 +1748,28 @@ static int map_parameter(const char *pszParmName)
return (-1);
}
+
+/*
+ return the parameter structure for a parameter
+*/
+struct parm_struct *lp_parm_struct(const char *name)
+{
+ int parmnum = map_parameter(name);
+ if (parmnum == -1) return NULL;
+ return &parm_table[parmnum];
+}
+
+/*
+ return the parameter pointer for a parameter
+*/
+void *lp_parm_ptr(int snum, struct parm_struct *parm)
+{
+ if (snum == -1) {
+ return parm->ptr;
+ }
+ return ((char *)ServicePtrs[snum]) + PTR_DIFF(parm->ptr, &sDefault);
+}
+
/***************************************************************************
Set a boolean variable from the text value stored in the passed string.
Returns True in success, False if the passed string does not correctly
@@ -3304,117 +3293,3 @@ int lp_maxprintjobs(int snum)
return maxjobs;
}
-
-
-/*
- allow access to loadparm variables from inside esp scripts in swat
-
- can be called in 4 ways:
-
- v = lpGet("type:parm"); gets a parametric variable
- v = lpGet("share", "type:parm"); gets a parametric variable on a share
- v = lpGet("parm"); gets a global variable
- v = lpGet("share", "parm"); gets a share variable
-
- the returned variable is a ejs object. It is an array object for lists.
-*/
-int esp_lpGet(struct EspRequest *ep, int argc, char **argv)
-{
- struct parm_struct *parm = NULL;
- void *parm_ptr = NULL;
- int i;
-
- if (argc < 1) return -1;
-
- if (argc == 2) {
- /* its a share parameter */
- int parmnum, snum = lp_servicenumber(argv[0]);
- if (snum == -1) {
- return -1;
- }
- if (strchr(argv[1], ':')) {
- /* its a parametric option on a share */
- const char *type = talloc_strndup(ep, argv[1], strcspn(argv[1], ":"));
- const char *option = strchr(argv[1], ':') + 1;
- const char *value;
- if (type == NULL || option == NULL) return -1;
- value = get_parametrics(snum, type, option);
- if (value == NULL) return -1;
- espSetReturnString(ep, value);
- return 0;
- }
-
- /* find a share parameter */
- parmnum = map_parameter(argv[1]);
- if (parmnum == -1) {
- return -1;
- }
- parm = &parm_table[parmnum];
- if (parm->class == P_GLOBAL) {
- return -1;
- }
- parm_ptr = ((char *)ServicePtrs[snum]) + PTR_DIFF(parm->ptr, &sDefault);
- } else if (strchr(argv[0], ':')) {
- /* its a global parametric option */
- const char *type = talloc_strndup(ep, argv[0], strcspn(argv[0], ":"));
- const char *option = strchr(argv[0], ':') + 1;
- const char *value;
- if (type == NULL || option == NULL) return -1;
- value = get_parametrics(-1, type, option);
- if (value == NULL) return -1;
- espSetReturnString(ep, value);
- return 0;
- } else {
- /* its a global parameter */
- int parmnum = map_parameter(argv[0]);
- if (parmnum == -1) {
- return -1;
- }
- parm = &parm_table[parmnum];
- parm_ptr = parm->ptr;
- }
-
- if (parm == NULL || parm_ptr == NULL) {
- return -1;
- }
-
- /* construct and return the right type of ejs object */
- switch (parm->type) {
- case P_STRING:
- case P_USTRING:
- espSetReturnString(ep, *(char **)parm_ptr);
- break;
- case P_BOOL:
- espSetReturn(ep, mprCreateBoolVar(*(BOOL *)parm_ptr));
- break;
- case P_INTEGER:
- espSetReturn(ep, mprCreateIntegerVar(*(int *)parm_ptr));
- break;
- case P_ENUM:
- for (i=0; parm->enum_list[i].name; i++) {
- if (*(int *)parm_ptr == parm->enum_list[i].value) {
- espSetReturnString(ep, parm->enum_list[i].name);
- return 0;
- }
- }
- return -1;
-
- case P_LIST: {
- const char **list = *(const char ***)parm_ptr;
- struct MprVar var;
- var = mprCreateObjVar(parm->label, 10);
- for (i=0;list[i];i++) {
- char idx[16];
- struct MprVar val;
- mprItoa(i, idx, sizeof(idx));
- val = mprCreateStringVar(list[i], 1);
- mprCreateProperty(&var, idx, &val);
- }
- espSetReturn(ep, var);
- break;
- case P_SEP:
- return -1;
- }
- }
- return 0;
-}
diff --git a/source4/param/loadparm.h b/source4/param/loadparm.h
new file mode 100644
index 0000000000..217955d294
--- /dev/null
+++ b/source4/param/loadparm.h
@@ -0,0 +1,60 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ type definitions for loadparm
+
+ Copyright (C) Karl Auer 1993-1998
+
+ Largely re-written by Andrew Tridgell, September 1994
+
+ Copyright (C) Simo Sorce 2001
+ Copyright (C) Alexander Bokovoy 2002
+ Copyright (C) Stefan (metze) Metzmacher 2002
+ Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003.
+ Copyright (C) James Myers 2003 <myersjj@samba.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/* the following are used by loadparm for option lists */
+typedef enum {
+ P_BOOL,P_INTEGER,P_LIST,P_STRING,P_USTRING,P_ENUM,P_SEP
+} parm_type;
+
+typedef enum {
+ P_LOCAL,P_GLOBAL,P_SEPARATOR,P_NONE
+} parm_class;
+
+struct enum_list {
+ int value;
+ const char *name;
+};
+
+struct parm_struct {
+ const char *label;
+ parm_type type;
+ parm_class class;
+ void *ptr;
+ BOOL (*special)(const char *, char **);
+ const struct enum_list *enum_list;
+ uint_t flags;
+ union {
+ BOOL bvalue;
+ int ivalue;
+ char *svalue;
+ char cvalue;
+ const char **lvalue;
+ } def;
+};
diff --git a/source4/web_server/calls.c b/source4/web_server/calls.c
index 8cd0c21b1c..6f1649d131 100644
--- a/source4/web_server/calls.c
+++ b/source4/web_server/calls.c
@@ -22,6 +22,7 @@
#include "includes.h"
#include "web_server/esp/esp.h"
+#include "param/loadparm.h"
/*
@@ -63,6 +64,111 @@ static int esp_typeof(struct EspRequest *ep, int argc, struct MprVar **argv)
/*
+ allow access to loadparm variables from inside esp scripts in swat
+
+ can be called in 4 ways:
+
+ v = lpGet("type:parm"); gets a parametric variable
+ v = lpGet("share", "type:parm"); gets a parametric variable on a share
+ v = lpGet("parm"); gets a global variable
+ v = lpGet("share", "parm"); gets a share variable
+
+ the returned variable is a ejs object. It is an array object for lists.
+*/
+static int esp_lpGet(struct EspRequest *ep, int argc, char **argv)
+{
+ struct parm_struct *parm = NULL;
+ void *parm_ptr = NULL;
+ int i;
+
+ if (argc < 1) return -1;
+
+ if (argc == 2) {
+ /* its a share parameter */
+ int snum = lp_servicenumber(argv[0]);
+ if (snum == -1) {
+ return -1;
+ }
+ if (strchr(argv[1], ':')) {
+ /* its a parametric option on a share */
+ const char *type = talloc_strndup(ep, argv[1], strcspn(argv[1], ":"));
+ const char *option = strchr(argv[1], ':') + 1;
+ const char *value;
+ if (type == NULL || option == NULL) return -1;
+ value = lp_get_parametric(snum, type, option);
+ if (value == NULL) return -1;
+ espSetReturnString(ep, value);
+ return 0;
+ }
+
+ parm = lp_parm_struct(argv[1]);
+ if (parm == NULL || parm->class == P_GLOBAL) {
+ return -1;
+ }
+ parm_ptr = lp_parm_ptr(snum, parm);
+ } else if (strchr(argv[0], ':')) {
+ /* its a global parametric option */
+ const char *type = talloc_strndup(ep, argv[0], strcspn(argv[0], ":"));
+ const char *option = strchr(argv[0], ':') + 1;
+ const char *value;
+ if (type == NULL || option == NULL) return -1;
+ value = lp_get_parametric(-1, type, option);
+ if (value == NULL) return -1;
+ espSetReturnString(ep, value);
+ return 0;
+ } else {
+ /* its a global parameter */
+ parm = lp_parm_struct(argv[0]);
+ if (parm == NULL) return -1;
+ parm_ptr = parm->ptr;
+ }
+
+ if (parm == NULL || parm_ptr == NULL) {
+ return -1;
+ }
+
+ /* construct and return the right type of ejs object */
+ switch (parm->type) {
+ case P_STRING:
+ case P_USTRING:
+ espSetReturnString(ep, *(char **)parm_ptr);
+ break;
+ case P_BOOL:
+ espSetReturn(ep, mprCreateBoolVar(*(BOOL *)parm_ptr));
+ break;
+ case P_INTEGER:
+ espSetReturn(ep, mprCreateIntegerVar(*(int *)parm_ptr));
+ break;
+ case P_ENUM:
+ for (i=0; parm->enum_list[i].name; i++) {
+ if (*(int *)parm_ptr == parm->enum_list[i].value) {
+ espSetReturnString(ep, parm->enum_list[i].name);
+ return 0;
+ }
+ }
+ return -1;
+
+ case P_LIST: {
+ const char **list = *(const char ***)parm_ptr;
+ struct MprVar var;
+ var = mprCreateObjVar(parm->label, 10);
+ for (i=0;list[i];i++) {
+ char idx[16];
+ struct MprVar val;
+ mprItoa(i, idx, sizeof(idx));
+ val = mprCreateStringVar(list[i], 1);
+ mprCreateProperty(&var, idx, &val);
+ }
+ espSetReturn(ep, var);
+ break;
+ case P_SEP:
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/*
setup the C functions that be called from ejs
*/
void http_setup_ejs_functions(void)
diff --git a/source4/web_server/ejs/miniMpr.c b/source4/web_server/ejs/miniMpr.c
index 8e1689ac9d..311f2defeb 100644
--- a/source4/web_server/ejs/miniMpr.c
+++ b/source4/web_server/ejs/miniMpr.c
@@ -35,7 +35,7 @@
#if !BLD_APPWEB
#if !BLD_GOAHEAD_WEBSERVER
-static TALLOC_CTX *mpr_ctx;
+static void *mpr_ctx;
void mprSetCtx(TALLOC_CTX *ctx)
{
diff --git a/source4/web_server/ejs/miniMpr.h b/source4/web_server/ejs/miniMpr.h
index b30ef1437f..447a0f4c34 100644
--- a/source4/web_server/ejs/miniMpr.h
+++ b/source4/web_server/ejs/miniMpr.h
@@ -35,10 +35,7 @@
/*
* Find out about our configuration
*/
-/*
- this is not needed in samba builds, and breaks the build with my gcc-4.0 --metze
- #include "includes.h"
-*/
+ #include "includes.h"
/* allow this library to use strcpy() */
#undef strcpy
@@ -195,7 +192,7 @@ typedef int bool;
typedef __int64 int64;
typedef unsigned __int64 uint64;
#else
- #define O_BINARY 0
+#define O_BINARY 0
#ifndef uint
#define uint unsigned
#endif
@@ -270,8 +267,7 @@ extern int mprReallocStrcat(char **dest, int max, int existingLen,
extern int mprStrcpy(char *dest, int destMax, const char *src);
extern int mprMemcpy(char *dest, int destMax, const char *src, int nbytes);
-extern void mprFreeAll(void);
-extern void mprSetCtx(TALLOC_CTX *ctx);
+extern void mprSetCtx(void *ctx);
#ifdef __cplusplus
}