]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3-libnet_join: add libnet_odj_find_win7blob to libnet_offline_join
authorGünther Deschner <gd@samba.org>
Mon, 15 Feb 2021 19:57:04 +0000 (20:57 +0100)
committerGünther Deschner <gd@samba.org>
Wed, 14 Jul 2021 16:49:30 +0000 (16:49 +0000)
Guenther

Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Alexander Bokovoy <ab@samba.org>
source3/libnet/libnet_join_offline.c
source3/libnet/libnet_join_offline.h

index d96d509d0fb9a0db74b38f4623733ec9199233a3..5e08ba46debfed3d973a2d5745838cca4f8a2261 100644 (file)
@@ -322,3 +322,54 @@ WERROR libnet_odj_compose_ODJ_PROVISION_DATA(TALLOC_CTX *mem_ctx,
 
        return WERR_OK;
 }
+
+WERROR libnet_odj_find_win7blob(const struct ODJ_PROVISION_DATA *r,
+                               struct ODJ_WIN7BLOB *win7blob)
+{
+       int i;
+
+       if (r == NULL) {
+               return WERR_INVALID_PARAMETER;
+       }
+
+       for (i = 0; i < r->ulcBlobs; i++) {
+
+               struct ODJ_BLOB b = r->pBlobs[i];
+
+               switch (b.ulODJFormat) {
+               case ODJ_WIN7_FORMAT:
+                       *win7blob = b.pBlob->odj_win7blob;
+                       return WERR_OK;
+
+               case ODJ_WIN8_FORMAT: {
+                       NTSTATUS status;
+                       struct OP_PACKAGE_PART_COLLECTION *col;
+                       struct GUID guid;
+                       int k;
+
+                       if (b.pBlob->op_package.p->WrappedPartCollection.w == NULL) {
+                               return WERR_BAD_FORMAT;
+                       }
+
+                       col = b.pBlob->op_package.p->WrappedPartCollection.w->s.p;
+
+                       status = GUID_from_string(ODJ_GUID_JOIN_PROVIDER, &guid);
+                       if (!NT_STATUS_IS_OK(status)) {
+                               return WERR_NOT_ENOUGH_MEMORY;
+                       }
+
+                       for (k = 0; k < col->cParts; k++) {
+                               if (GUID_equal(&guid, &col->pParts[k].PartType)) {
+                                       *win7blob = col->pParts[k].Part->win7blob;
+                                       return WERR_OK;
+                               }
+                       }
+                       break;
+               }
+               default:
+                       return WERR_BAD_FORMAT;
+               }
+       }
+
+       return WERR_BAD_FORMAT;
+}
index 3ef80fa31c4843687e9e523e870140c3d35e9294..5abebcf6372a50a2c12df19a246ee96ba5f6f5ab 100644 (file)
@@ -20,3 +20,5 @@
 WERROR libnet_odj_compose_ODJ_PROVISION_DATA(TALLOC_CTX *mem_ctx,
                                             const struct libnet_JoinCtx *r,
                                             struct ODJ_PROVISION_DATA **b_p);
+WERROR libnet_odj_find_win7blob(const struct ODJ_PROVISION_DATA *r,
+                               struct ODJ_WIN7BLOB *win7blob);