#include "librpc/gen_ndr/ndr_samr.h"
#include "librpc/gen_ndr/ndr_nbt.h"
#include "dlinklist.h"
+#include "param/loadparm.h"
BOOL in_client = False; /* Not in the client by default */
static BOOL bLoaded = 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_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,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 {
char *szIDMapBackend;
char *szGuestaccount;
char *swat_directory;
+ BOOL web_tls;
+ char *web_keyfile;
+ char *web_certfile;
+ char *web_cafile;
+ char *web_crlfile;
int max_mux;
int max_xmit;
int pwordlevel;
int nbt_port;
int dgram_port;
int cldap_port;
- int swat_port;
+ int web_port;
char *socket_options;
BOOL bDNSproxy;
BOOL bWINSsupport;
{"nbt port", P_INTEGER, P_GLOBAL, &Globals.nbt_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"dgram port", P_INTEGER, P_GLOBAL, &Globals.dgram_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"cldap port", P_INTEGER, P_GLOBAL, &Globals.cldap_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
- {"swat port", P_INTEGER, P_GLOBAL, &Globals.swat_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"web port", P_INTEGER, P_GLOBAL, &Globals.web_port, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"web tls", P_BOOL, P_GLOBAL, &Globals.web_tls, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"web tls keyfile", P_STRING, P_GLOBAL, &Globals.web_keyfile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"web tls certfile", P_STRING, P_GLOBAL, &Globals.web_certfile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"web tls cafile", P_STRING, P_GLOBAL, &Globals.web_cafile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"web tls crlfile", P_STRING, P_GLOBAL, &Globals.web_crlfile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"swat directory", P_STRING, P_GLOBAL, &Globals.swat_directory, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
{"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, FLAG_DEVELOPER},
{"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_DEVELOPER},
do_parameter("nbt port", "137");
do_parameter("dgram port", "138");
do_parameter("cldap port", "389");
- do_parameter("swat port", "901");
- do_parameter_var("swat directory", "%s%s", dyn_LIBDIR, "/swat");
+ do_parameter("web port", "901");
+ do_parameter("swat directory", dyn_SWATDIR);
do_parameter("nt status support", "True");
do_parameter("max wins ttl", "432000");
do_parameter("min wins ttl", "10");
+
+ do_parameter("web tls", "True");
+ do_parameter_var("web tls keyfile", "%s/tls/key.pem", dyn_PRIVATE_DIR);
+ do_parameter_var("web tls certfile", "%s/tls/cert.pem", dyn_PRIVATE_DIR);
+ do_parameter_var("web tls cafile", "%s/tls/ca.pem", dyn_PRIVATE_DIR);
}
static TALLOC_CTX *lp_talloc;
FN_GLOBAL_INTEGER(lp_nbt_port, &Globals.nbt_port)
FN_GLOBAL_INTEGER(lp_dgram_port, &Globals.dgram_port)
FN_GLOBAL_INTEGER(lp_cldap_port, &Globals.cldap_port)
-FN_GLOBAL_INTEGER(lp_swat_port, &Globals.swat_port)
+FN_GLOBAL_INTEGER(lp_web_port, &Globals.web_port)
FN_GLOBAL_STRING(lp_dos_charset, &Globals.dos_charset)
FN_GLOBAL_STRING(lp_swat_directory, &Globals.swat_directory)
+FN_GLOBAL_BOOL(lp_web_tls, &Globals.web_tls)
+FN_GLOBAL_STRING(lp_web_keyfile, &Globals.web_keyfile)
+FN_GLOBAL_STRING(lp_web_certfile, &Globals.web_certfile)
+FN_GLOBAL_STRING(lp_web_cafile, &Globals.web_cafile)
+FN_GLOBAL_STRING(lp_web_crlfile, &Globals.web_crlfile)
FN_GLOBAL_STRING(lp_unix_charset, &Globals.unix_charset)
FN_GLOBAL_STRING(lp_display_charset, &Globals.display_charset)
FN_GLOBAL_STRING(lp_logfile, &Globals.szLogFile)
/* 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;
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);
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);
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);
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);
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);
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
switch (parm_table[i].type) {
case P_BOOL:
- case P_BOOLREV:
*(BOOL *)dest_ptr = *(BOOL *)src_ptr;
break;
case P_INTEGER:
case P_ENUM:
- case P_OCTAL:
*(int *)dest_ptr = *(int *)src_ptr;
break;
- case P_CHAR:
- *(char *)dest_ptr = *(char *)src_ptr;
- break;
-
case P_STRING:
string_set(dest_ptr,
*(char **)src_ptr);
set_boolean(parm_ptr, pszParmValue);
break;
- case P_BOOLREV:
- set_boolean(parm_ptr, pszParmValue);
- *(BOOL *)parm_ptr = !*(BOOL *)parm_ptr;
- break;
-
case P_INTEGER:
*(int *)parm_ptr = atoi(pszParmValue);
break;
- case P_CHAR:
- *(char *)parm_ptr = *pszParmValue;
- break;
-
- case P_OCTAL:
- sscanf(pszParmValue, "%o", (int *)parm_ptr);
- break;
-
case P_LIST:
*(const char ***)parm_ptr = str_list_make(talloc_autofree_context(),
pszParmValue, NULL);
fprintf(f, "%s", BOOLSTR(*(BOOL *)ptr));
break;
- case P_BOOLREV:
- fprintf(f, "%s", BOOLSTR(!*(BOOL *)ptr));
- break;
-
case P_INTEGER:
fprintf(f, "%d", *(int *)ptr);
break;
- case P_CHAR:
- fprintf(f, "%c", *(char *)ptr);
- break;
-
- case P_OCTAL:
- if (*(int *)ptr == -1) {
- fprintf(f, "-1");
- } else {
- fprintf(f, "0%o", *(int *)ptr);
- }
- break;
-
case P_LIST:
if ((char ***)ptr && *(char ***)ptr) {
char **list = *(char ***)ptr;
{
switch (type) {
case P_BOOL:
- case P_BOOLREV:
return (*((BOOL *)ptr1) == *((BOOL *)ptr2));
case P_INTEGER:
case P_ENUM:
- case P_OCTAL:
return (*((int *)ptr1) == *((int *)ptr2));
- case P_CHAR:
- return (*((char *)ptr1) == *((char *)ptr2));
-
case P_LIST:
return str_list_equal((const char **)(*(char ***)ptr1),
(const char **)(*(char ***)ptr2));
return strequal(parm_table[i].def.svalue,
*(char **)parm_table[i].ptr);
case P_BOOL:
- case P_BOOLREV:
return parm_table[i].def.bvalue ==
*(BOOL *)parm_table[i].ptr;
- case P_CHAR:
- return parm_table[i].def.cvalue ==
- *(char *)parm_table[i].ptr;
case P_INTEGER:
- case P_OCTAL:
case P_ENUM:
return parm_table[i].def.ivalue ==
*(int *)parm_table[i].ptr;
}
break;
case P_BOOL:
- case P_BOOLREV:
parm_table[i].def.bvalue =
*(BOOL *)parm_table[i].ptr;
break;
- case P_CHAR:
- parm_table[i].def.cvalue =
- *(char *)parm_table[i].ptr;
- break;
case P_INTEGER:
- case P_OCTAL:
case P_ENUM:
parm_table[i].def.ivalue =
*(int *)parm_table[i].ptr;