r19786: My last checkin to winreg_StringBuf killed rpccli_winreg_EnumKeys against
authorVolker Lendecke <vlendec@samba.org>
Sun, 19 Nov 2006 17:07:59 +0000 (17:07 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:15:55 +0000 (12:15 -0500)
W2k3. The server requires that size==0 in the [in] name. Somehow I get the
feeling that something is badly wrong here....

I did not yet recreate the gen_ndr equivalent, see next mail.

Volker

source/lib/util_str.c
source/librpc/idl/winreg.idl

index 414a87a562c25383f527c4f83f235e8b4ffe8f5b..fc13b75cc572a536b4c399b8fd2d2709e12c361f 100644 (file)
@@ -1644,6 +1644,24 @@ size_t strlen_m_term(const char *s)
        return strlen_m(s) + 1;
 }
 
+/*
+ * Weird helper routine for the winreg pipe: If nothing is around, return 0,
+ * if a string is there, include the terminator.
+ */
+
+size_t strlen_m_term_null(const char *s)
+{
+       size_t len;
+       if (!s) {
+               return 0;
+       }
+       len = strlen_m(s);
+       if (len == 0) {
+               return 0;
+       }
+
+       return len+1;
+}
 /**
  Return a RFC2254 binary string representation of a buffer.
  Used in LDAP filters.
index e911f475250c15175b538673d0686e70499ebec7..a69079bf8e57301a2c3879e0241a02840f2bc87b 100644 (file)
@@ -132,7 +132,7 @@ import "lsa.idl", "initshutdown.idl", "security.idl";
        );
 
        typedef struct {
-               [value(strlen_m_term(name)*2)] uint16 length; 
+               [value(strlen_m_term_null(name)*2)] uint16 length; 
                /* size cannot be auto-set by value() as it is the
                   amount of space the server is allowed to use for this
                   string in the reply, not its current size */