r20286: handle the non oid string cases for pushing too
authorStefan Metzmacher <metze@samba.org>
Wed, 20 Dec 2006 16:53:29 +0000 (16:53 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:29:32 +0000 (14:29 -0500)
metze
(This used to be commit 0777a8e749e8df88dd1b9f7be9e4f3012559243b)

source4/librpc/ndr/ndr_drsuapi.c

index dbbdd842f29b30a37603c4a728e609e50ddc8da8..5a8acf8dabab5eb9d49b86a3ff90245f0e70b3d9 100644 (file)
@@ -91,8 +91,17 @@ NTSTATUS ndr_push_drsuapi_DsReplicaOID(struct ndr_push *ndr, int ndr_flags, cons
                if (r->oid) {
                        DATA_BLOB blob;
 
-                       _OID_PUSH_CHECK(ber_write_OID_String(&blob, r->oid));
-                       talloc_steal(ndr, blob.data);
+                       if (strncasecmp("ff", r->oid, 2) == 0) {
+                               blob = strhex_to_data_blob(r->oid);
+                               if (!blob.data) {
+                                       return ndr_push_error(ndr, NDR_ERR_SUBCONTEXT,
+                                                             "HEX String Conversion Error: %s\n",
+                                                             __location__);
+                               }
+                       } else {
+                               _OID_PUSH_CHECK(ber_write_OID_String(&blob, r->oid));
+                               talloc_steal(ndr, blob.data);
+                       }
 
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, blob.length));
                        NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, blob.data, blob.length));
@@ -157,10 +166,16 @@ size_t ndr_size_drsuapi_DsReplicaOID_oid(const char *oid, int flags)
 
        if (!oid) return 0;
 
-       if (ber_write_OID_String(&_blob, oid)) {
-               ret = _blob.length;
+       if (strncasecmp("ff", oid, 2) == 0) {
+               _blob = strhex_to_data_blob(oid);
+               if (_blob.data) {
+                       ret = _blob.length;
+               }
+       } else {
+               if (ber_write_OID_String(&_blob, oid)) {
+                       ret = _blob.length;
+               }
        }
-
        data_blob_free(&_blob);
        return ret;
 }