]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3-libnet_join: add libnet_odj_find_joinprov3()
authorGünther Deschner <gd@samba.org>
Tue, 11 May 2021 13:22:12 +0000 (15:22 +0200)
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 5e08ba46debfed3d973a2d5745838cca4f8a2261..bb119ec8fd368fc42b3f4c26795ec7cbe084d549 100644 (file)
@@ -373,3 +373,54 @@ WERROR libnet_odj_find_win7blob(const struct ODJ_PROVISION_DATA *r,
 
        return WERR_BAD_FORMAT;
 }
+
+
+WERROR libnet_odj_find_joinprov3(const struct ODJ_PROVISION_DATA *r,
+                                struct OP_JOINPROV3_PART *joinprov3)
+{
+       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:
+                       continue;
+
+               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_PROVIDER3, &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)) {
+                                       *joinprov3 = *col->pParts[k].Part->join_prov3.p;
+                                       return WERR_OK;
+                               }
+                       }
+                       break;
+               }
+               default:
+                       return WERR_BAD_FORMAT;
+               }
+       }
+
+       return WERR_BAD_FORMAT;
+}
index 5abebcf6372a50a2c12df19a246ee96ba5f6f5ab..7507c5837554ed90f64c5101df3a3f8c3aadd2d0 100644 (file)
@@ -22,3 +22,5 @@ WERROR libnet_odj_compose_ODJ_PROVISION_DATA(TALLOC_CTX *mem_ctx,
                                             struct ODJ_PROVISION_DATA **b_p);
 WERROR libnet_odj_find_win7blob(const struct ODJ_PROVISION_DATA *r,
                                struct ODJ_WIN7BLOB *win7blob);
+WERROR libnet_odj_find_joinprov3(const struct ODJ_PROVISION_DATA *r,
+                                struct OP_JOINPROV3_PART *joinprov3);