r7008: - split out the loadparm type definitions so loadparm internals can be accesse...
authorAndrew Tridgell <tridge@samba.org>
Fri, 27 May 2005 07:14:01 +0000 (07:14 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:17:05 +0000 (13:17 -0500)
- moved esp_lpGet() to web_server/calls.c

- attempt to fixup ejs build with includes.h again

source/param/loadparm.c
source/param/loadparm.h [new file with mode: 0644]
source/web_server/calls.c
source/web_server/ejs/miniMpr.c
source/web_server/ejs/miniMpr.h

index ceb73e99581851f83ef243964a53e83c17c8d61f..af9c30d80e06eebc7a14a2e4b4f89119e7073c98 100644 (file)
@@ -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/source/param/loadparm.h b/source/param/loadparm.h
new file mode 100644 (file)
index 0000000..217955d
--- /dev/null
@@ -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;
+};
index 8cd0c21b1ced35fc112c59fa1d68931193bb78d2..6f1649d131f184b8436d50a3321b5bdfaa82103a 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "includes.h"
 #include "web_server/esp/esp.h"
+#include "param/loadparm.h"
 
 
 /*
@@ -62,6 +63,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
 */
index 8e1689ac9da31d1358e832bedbfdc67c6791730c..311f2defebd35c824c39da171232b5757bd905b2 100644 (file)
@@ -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)
 {
index b30ef1437f24dfb880004a01550f4255893cba2a..447a0f4c34c65be37da059be357b82bafa97dfeb 100644 (file)
 /*
  *     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
 }