Remove support for obsolete data type "ipv4address"
[samba.git] / source4 / lib / tdr / tdr.c
index 5ebe3f0852306c11ece285a0ca29ff921bab6ebd..6c5461a335dc94f724f09e863d9fb0859f0f1805 100644 (file)
@@ -8,7 +8,7 @@
    
    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
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    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.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
-#include "system/network.h"
 #include "system/filesys.h"
+#include "system/network.h"
 #include "tdr/tdr.h"
+#include "param/param.h"
 
 #define TDR_BASE_MARSHALL_SIZE 1024
 
 #define TDR_CVAL(tdr, ofs) CVAL(tdr->data.data,ofs)
 #define TDR_SVAL(tdr, ofs) (TDR_BE(tdr)?RSVAL(tdr->data.data,ofs):SVAL(tdr->data.data,ofs))
 #define TDR_IVAL(tdr, ofs) (TDR_BE(tdr)?RIVAL(tdr->data.data,ofs):IVAL(tdr->data.data,ofs))
-#define TDR_IVALS(tdr, ofs) (TDR_BE(tdr)?RIVALS(tdr->data.data,ofs):IVALS(tdr->data.data,ofs))
 #define TDR_SCVAL(tdr, ofs, v) SCVAL(tdr->data.data,ofs,v)
 #define TDR_SSVAL(tdr, ofs, v) do { if (TDR_BE(tdr))  { RSSVAL(tdr->data.data,ofs,v); } else SSVAL(tdr->data.data,ofs,v); } while (0)
 #define TDR_SIVAL(tdr, ofs, v) do { if (TDR_BE(tdr))  { RSIVAL(tdr->data.data,ofs,v); } else SIVAL(tdr->data.data,ofs,v); } while (0)
-#define TDR_SIVALS(tdr, ofs, v) do { if (TDR_BE(tdr))  { RSIVALS(tdr->data.data,ofs,v); } else SIVALS(tdr->data.data,ofs,v); } while (0)
 
-/*
+/**
   expand the available space in the buffer to 'size'
 */
 NTSTATUS tdr_push_expand(struct tdr_push *tdr, uint32_t size)
@@ -131,7 +129,7 @@ NTSTATUS tdr_print_uint32(struct tdr_print *tdr, const char *name, uint32_t *v)
        return NT_STATUS_OK;
 }
 
-NTSTATUS tdr_pull_charset(struct tdr_pull *tdr, TALLOC_CTX *ctx, const char **v, uint32_t length, uint32_t el_size, int chset)
+NTSTATUS tdr_pull_charset(struct tdr_pull *tdr, TALLOC_CTX *ctx, const char **v, uint32_t length, uint32_t el_size, charset_t chset)
 {
        int ret;
 
@@ -156,7 +154,7 @@ NTSTATUS tdr_pull_charset(struct tdr_pull *tdr, TALLOC_CTX *ctx, const char **v,
 
        TDR_PULL_NEED_BYTES(tdr, el_size*length);
        
-       ret = convert_string_talloc(ctx, chset, CH_UNIX, tdr->data.data+tdr->offset, el_size*length, discard_const_p(void *, v));
+       ret = convert_string_talloc(ctx, tdr->iconv_convenience, chset, CH_UNIX, tdr->data.data+tdr->offset, el_size*length, discard_const_p(void *, v));
 
        if (ret == -1) {
                return NT_STATUS_INVALID_PARAMETER;
@@ -167,7 +165,7 @@ NTSTATUS tdr_pull_charset(struct tdr_pull *tdr, TALLOC_CTX *ctx, const char **v,
        return NT_STATUS_OK;
 }
 
-NTSTATUS tdr_push_charset(struct tdr_push *tdr, const char **v, uint32_t length, uint32_t el_size, int chset)
+NTSTATUS tdr_push_charset(struct tdr_push *tdr, const char **v, uint32_t length, uint32_t el_size, charset_t chset)
 {
        ssize_t ret, required;
 
@@ -178,7 +176,7 @@ NTSTATUS tdr_push_charset(struct tdr_push *tdr, const char **v, uint32_t length,
        required = el_size * length;
        TDR_PUSH_NEED_BYTES(tdr, required);
 
-       ret = convert_string(CH_UNIX, chset, *v, strlen(*v), tdr->data.data+tdr->data.length, required);
+       ret = convert_string(tdr->iconv_convenience, CH_UNIX, chset, *v, strlen(*v), tdr->data.data+tdr->data.length, required);
 
        if (ret == -1) {
                return NT_STATUS_INVALID_PARAMETER;
@@ -194,46 +192,13 @@ NTSTATUS tdr_push_charset(struct tdr_push *tdr, const char **v, uint32_t length,
        return NT_STATUS_OK;
 }
 
-NTSTATUS tdr_print_charset(struct tdr_print *tdr, const char *name, const char **v, uint32_t length, uint32_t el_size, int chset)
+NTSTATUS tdr_print_charset(struct tdr_print *tdr, const char *name, const char **v, uint32_t length, uint32_t el_size, charset_t chset)
 {
        tdr->print(tdr, "%-25s: %s", name, *v);
        return NT_STATUS_OK;
 }
 
-/*
-  pull a ipv4address
-*/
-NTSTATUS tdr_pull_ipv4address(struct tdr_pull *tdr, TALLOC_CTX *ctx, const char **address)
-{
-       struct ipv4_addr in;
-       TDR_CHECK(tdr_pull_uint32(tdr, ctx, &in.addr));
-       in.addr = htonl(in.addr);
-       *address = talloc_strdup(tdr, sys_inet_ntoa(in));
-       NT_STATUS_HAVE_NO_MEMORY(*address);
-       return NT_STATUS_OK;
-}
-
-/*
-  push a ipv4address
-*/
-NTSTATUS tdr_push_ipv4address(struct tdr_push *tdr, const char **address)
-{
-       uint32_t addr = htonl(interpret_addr(*address));
-       TDR_CHECK(tdr_push_uint32(tdr, &addr));
-       return NT_STATUS_OK;
-}
-
-/*
-  print a ipv4address
-*/
-NTSTATUS tdr_print_ipv4address(struct tdr_print *tdr, const char *name, 
-                          const char **address)
-{
-       tdr->print(tdr, "%-25s: %s", name, *address);
-       return NT_STATUS_OK;
-}
-
-/*
+/**
   parse a hyper
 */
 NTSTATUS tdr_pull_hyper(struct tdr_pull *tdr, TALLOC_CTX *ctx, uint64_t *v)
@@ -245,7 +210,7 @@ NTSTATUS tdr_pull_hyper(struct tdr_pull *tdr, TALLOC_CTX *ctx, uint64_t *v)
        return NT_STATUS_OK;
 }
 
-/*
+/**
   push a hyper
 */
 NTSTATUS tdr_push_hyper(struct tdr_push *tdr, uint64_t *v)
@@ -257,9 +222,7 @@ NTSTATUS tdr_push_hyper(struct tdr_push *tdr, uint64_t *v)
        return NT_STATUS_OK;
 }
 
-
-
-/*
+/**
   push a NTTIME
 */
 NTSTATUS tdr_push_NTTIME(struct tdr_push *tdr, NTTIME *t)
@@ -268,7 +231,7 @@ NTSTATUS tdr_push_NTTIME(struct tdr_push *tdr, NTTIME *t)
        return NT_STATUS_OK;
 }
 
-/*
+/**
   pull a NTTIME
 */
 NTSTATUS tdr_pull_NTTIME(struct tdr_pull *tdr, TALLOC_CTX *ctx, NTTIME *t)
@@ -277,7 +240,7 @@ NTSTATUS tdr_pull_NTTIME(struct tdr_pull *tdr, TALLOC_CTX *ctx, NTTIME *t)
        return NT_STATUS_OK;
 }
 
-/*
+/**
   push a time_t
 */
 NTSTATUS tdr_push_time_t(struct tdr_push *tdr, time_t *t)
@@ -285,7 +248,7 @@ NTSTATUS tdr_push_time_t(struct tdr_push *tdr, time_t *t)
        return tdr_push_uint32(tdr, (uint32_t *)t);
 }
 
-/*
+/**
   pull a time_t
 */
 NTSTATUS tdr_pull_time_t(struct tdr_pull *tdr, TALLOC_CTX *ctx, time_t *t)
@@ -375,9 +338,33 @@ NTSTATUS tdr_pull_DATA_BLOB(struct tdr_pull *tdr, TALLOC_CTX *ctx, DATA_BLOB *bl
        return NT_STATUS_OK;
 }
 
-NTSTATUS tdr_push_to_fd(int fd, tdr_push_fn_t push_fn, const void *p)
+struct tdr_push *tdr_push_init(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *ic)
 {
-       struct tdr_push *push = talloc_zero(NULL, struct tdr_push);
+       struct tdr_push *push = talloc_zero(mem_ctx, struct tdr_push);
+
+       if (push == NULL)
+               return NULL;
+
+       push->iconv_convenience = talloc_reference(push, ic);
+
+       return push;
+}
+
+struct tdr_pull *tdr_pull_init(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *ic)
+{
+       struct tdr_pull *pull = talloc_zero(mem_ctx, struct tdr_pull);
+
+       if (pull == NULL)
+               return NULL;
+
+       pull->iconv_convenience = talloc_reference(pull, ic);
+
+       return pull;
+}
+
+NTSTATUS tdr_push_to_fd(int fd, struct smb_iconv_convenience *iconv_convenience, tdr_push_fn_t push_fn, const void *p)
+{
+       struct tdr_push *push = tdr_push_init(NULL, iconv_convenience);
 
        if (push == NULL)
                return NT_STATUS_NO_MEMORY;
@@ -408,9 +395,7 @@ void tdr_print_debug_helper(struct tdr_print *tdr, const char *format, ...) _PRI
        vasprintf(&s, format, ap);
        va_end(ap);
 
-       for (i=0;i<tdr->level;i++) {
-               DEBUG(0,("    "));
-       }
+       for (i=0;i<tdr->level;i++) { DEBUG(0,("    ")); }
 
        DEBUG(0,("%s\n", s));
        free(s);