diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/build/pidl/NOTES.txt | 265 | ||||
-rwxr-xr-x | source4/build/pidl/pidl.pl | 2 | ||||
-rw-r--r-- | source4/lib/module.c | 4 | ||||
-rw-r--r-- | source4/lib/registry/TODO | 3 | ||||
-rw-r--r-- | source4/lib/registry/common/reg_interface.c | 8 | ||||
-rw-r--r-- | source4/lib/registry/config.m4 | 2 | ||||
-rw-r--r-- | source4/lib/registry/reg_backend_ldb/reg_backend_ldb.c | 8 |
7 files changed, 19 insertions, 273 deletions
diff --git a/source4/build/pidl/NOTES.txt b/source4/build/pidl/NOTES.txt deleted file mode 100644 index 24e55db9ef..0000000000 --- a/source4/build/pidl/NOTES.txt +++ /dev/null @@ -1,265 +0,0 @@ -midl types ----------- - -pidl uses slightly different types to midl by default. The following -defines in your MS IDL may make things easier to use the same IDL on -both platforms. - -#define unistr [string] wchar_t * -#define uint8 char -#define uint16 short -#define uint32 long -#define HYPER_T hyper - - -Let's look at the mutliple ways you can encode an array. - -CONFORMANT ARRAYS ------------------ - -A conformant array is one with that ends in [*] or []. The strange -things about conformant arrays are: - - * they can only appear as the last element of a structure - - * the array size appears before the structure itself on the wire. - -So, in this example: - - typedef struct { - long abc; - long count; - long foo; - [size_is(count)] long s[*]; - } Struct1; - -it appears like this: - -[size_is] [abc] [count] [foo] [s...] - -the first [size_is] field is the allocation size of the array, and -occurs before the array elements and even before the structure -alignment. - -Note that size_is() can refer to a constant, but that doesn't change -the wire representation. It does not make the array a fixed array. - -midl.exe would write the above array as the following C header: - - typedef struct { - long abc; - long count; - long foo; - long s[1]; - } Struct1; - -pidl takes a different approach, and writes it like this: - - typedef struct { - long abc; - long count; - long foo; - long *s; - } Struct1; - - - -VARYING ARRAYS --------------- - -A varying array looks like this: - - typedef struct { - long abc; - long count; - long foo; - [size_is(count)] long *s; - } Struct1; - -This will look like this on the wire: - -[abc] [count] [foo] [PTR_s] [count] [s...] - - -FIXED ARRAYS ------------- - -A fixed array looks like this: - - typedef struct { - long s[10]; - } Struct1; - -The NDR representation looks just like 10 separate long -declarations. The array size is not encoded on the wire. - -pidl also supports "inline" arrays, which are not part of the IDL/NDR -standard. These are declared like this: - - typedef struct { - uint32 foo; - uint32 count; - uint32 bar; - long s[count]; - } Struct1; - -This appears like this: - -[foo] [count] [bar] [s...] - -Fixed arrays are an extension added to support some of the strange -embedded structures in security descriptors and spoolss. - -Supported MIDL-compatible properties (attributes is the MIDL term) ------------------------------------- -in -out -ref -public -length_is -switch_is -size_is -uuid -case -default -string -unique - -PIDL Specific properties ---------------- -noprint -value -relative -subcontext -flag - -Unsupported MIDL properties ---------------------------- -aggregatable -appobject -async_uuid -bindable -call_as -coclass -control -cpp_quote -defaultbind -defaultcollelem -defaultvalue -defaultvtable -dispinterface -displaybind -dual -entry -first_is -helpcontext -helpfile -helpstringcontext -helpstringdll -helpstring -hidden -idl_module -idl_quote -id -iid_is -immediatebind -importlib -import -include -includelib -last_is -lcid -licensed -local -max_is -module -ms_union -no_injected_text -nonbrowsable -noncreatable -nonextensible -object -odl -oleautomation -optional -pointer_default -pragma -progid -propget -propputref -propput -ptr -range -readonly -requestedit -restricted -retval -source -switch_type -transmit_as -uidefault -usesgetlasterror -v1_enum -vararg -vi_progid -wire_marshal - -[public] property ------------------ - -The [public] property on a structure or union is a pidl extension that -forces the generated pull/push functions to be non-static. This allows -you to declare types that can be used between modules. If you don't -specify [public] then pull/push functions for other than top-level -functions are declared static. - -[relative] property -------------------- - -The [relative] property can be supplied on a pointer. When it is used -it declares the pointer as a spoolss style "relative" pointer, which -means it appears on the wire as an offset within the current -encapsulating structure. This is not part of normal IDL/NDR, but it is -a very useful extension as it avoids the manual encoding of many -complex structures. - - -[noprint] property ------------------- - -The [noprint] property is a pidl extension that allows you to specify -that pidl should not generate a ndr_print_*() function for that -structure or union. This is used when you wish to define your own -print function that prints a structure in a nicer manner. A good -example is the use of [noprint] on dom_sid, which allows the -pretty-printing of SIDs. - -[value] property ----------------- - -The [value(expression)] property is a pidl extension that allows you -to specify the value of a field when it is put on the wire. This -allows fields that always have a well-known value to be automatically -filled in, thus making the API more programmer friendly. The -expression can be any C expression, although if you refer to variables -in the current structure you will need to dereference them with -r->. See samr_Name as a good example. - - -[nodiscriminant] property -------------------------- - -The [nodiscriminant] property on a union means that the usual uint16 -discriminent field at the start of the union on the wire is -omitted. This is not normally allowed in IDL/NDR, but is used for some -spoolss structures. - - -VALIDATOR ---------- - -We need to write an IDL validator, so we know that we are writing -valid IDL. Right now the compiler sails on regardless in many cases -even if the IDL is invalid (for example, I don't check that conformant -arrays are always the last element in any structure). There are dozens -of rules that should be checked. diff --git a/source4/build/pidl/pidl.pl b/source4/build/pidl/pidl.pl index b3dc7c1b38..1c122932ba 100755 --- a/source4/build/pidl/pidl.pl +++ b/source4/build/pidl/pidl.pl @@ -65,7 +65,7 @@ sub ShowHelp() --dump dump a pidl file back to idl --header create a C header file --parser create a C parser - --server create server boilterplate + --server create server boilerplate --template print a template for a pipe --eparser create an ethereal parser --diff run diff on the idl and dumped output diff --git a/source4/lib/module.c b/source4/lib/module.c index 15f92db59e..f03e19d924 100644 --- a/source4/lib/module.c +++ b/source4/lib/module.c @@ -2,7 +2,7 @@ Unix SMB/CIFS implementation. module loading system - Copyright (C) Jelmer Vernooij 2002-2003 + Copyright (C) Jelmer Vernooij 2002-2004 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 @@ -133,7 +133,7 @@ NTSTATUS register_subsystem(const char *name, register_backend_function callback while(t) { if(!strcmp(name, t->name)) { /* its already registered! */ - DEBUG(0,("SUBSYSTEM '%s' for type already registered\n", name)); + DEBUG(0,("Subsystem '%s' already registered\n", name)); return NT_STATUS_OBJECT_NAME_COLLISION; } t = t->next; diff --git a/source4/lib/registry/TODO b/source4/lib/registry/TODO index 9b0dbe4c71..695f786b69 100644 --- a/source4/lib/registry/TODO +++ b/source4/lib/registry/TODO @@ -24,6 +24,9 @@ reg_backend_wine.c: regshell: - support for security descriptors + + regdiff: + - fix gregedit.c: - support for editing values / adding values / deleting values diff --git a/source4/lib/registry/common/reg_interface.c b/source4/lib/registry/common/reg_interface.c index 6d305e61bf..6ad7ee69cb 100644 --- a/source4/lib/registry/common/reg_interface.c +++ b/source4/lib/registry/common/reg_interface.c @@ -64,8 +64,12 @@ static struct reg_init_function_entry *reg_find_backend_entry(const char *name) if(reg_first_init) { status = register_subsystem("registry", registry_register); - if (!NT_STATUS_IS_OK(status)) + if (NT_STATUS_IS_ERR(status)) { + DEBUG(0, ("Error registering registry subsystem: %s\n", nt_errstr(status))); + /* Don't try the initialisation again */ + reg_first_init = False; return NULL; + } static_init_registry; reg_first_init = False; @@ -83,7 +87,7 @@ static struct reg_init_function_entry *reg_find_backend_entry(const char *name) BOOL reg_has_backend(const char *backend) { - return reg_find_backend_entry(backend)?True:False; + return reg_find_backend_entry(backend) != NULL?True:False; } /* Open a registry file/host/etc */ diff --git a/source4/lib/registry/config.m4 b/source4/lib/registry/config.m4 index 331b9c2df1..a1dc9a45bc 100644 --- a/source4/lib/registry/config.m4 +++ b/source4/lib/registry/config.m4 @@ -27,7 +27,7 @@ SMB_MODULE_MK(registry_w95, REGISTRY, STATIC, lib/registry/config.mk) SMB_MODULE_MK(registry_dir, REGISTRY, STATIC, lib/registry/config.mk) SMB_MODULE_MK(registry_rpc, REGISTRY, STATIC, lib/registry/config.mk) SMB_MODULE_MK(registry_gconf, REGISTRY, STATIC, lib/registry/config.mk) -SMB_MODULE_MK(registry_ldb, REGISTRY, NOT, lib/registry/config.mk) +SMB_MODULE_MK(registry_ldb, REGISTRY, STATIC, lib/registry/config.mk) SMB_SUBSYSTEM_MK(REGISTRY,lib/registry/config.mk) diff --git a/source4/lib/registry/reg_backend_ldb/reg_backend_ldb.c b/source4/lib/registry/reg_backend_ldb/reg_backend_ldb.c index 498dc6991b..7b574069e9 100644 --- a/source4/lib/registry/reg_backend_ldb/reg_backend_ldb.c +++ b/source4/lib/registry/reg_backend_ldb/reg_backend_ldb.c @@ -39,6 +39,7 @@ static char *reg_path_to_ldb(TALLOC_CTX *mem_ctx, const char *path) } ret[strlen(ret)-1] = ')'; + printf("Doing search for : %s\n", ret); return ret; } @@ -85,9 +86,12 @@ static WERROR ldb_fetch_subkeys(REG_KEY *k, int *count, REG_KEY ***subkeys) return WERR_OK; } +static WERROR ldb_get_hive(REG_HANDLE *h, int num, REG_KEY **key) +{ + /* FIXME */ +} - -static WERROR ldb_open_key(REG_HANDLE *h, const char *name, REG_KEY **key) +static WERROR ldb_open_key(REG_HANDLE *h, int num, const char *name, REG_KEY **key) { struct ldb_context *c = h->backend_data; char *path; |