  Let $\mathfrak{g}$ be a Leibniz algebra and $E$ a vector space containing
$\mathfrak{g}$ as a subspace. All Leibniz algebra structures on $E$ containing
$\mathfrak{g}$ as a subalgebra are explicitly described and classified by two
non-abelian cohomological type objects: ${\mathcal H}{\mathcal
L}^{2}_{\mathfrak{g}} \, (V, \, \mathfrak{g})$ provides the classification up
to an isomorphism that stabilizes $\mathfrak{g}$ and ${\mathcal H}{\mathcal
L}^{2} \, (V, \, \mathfrak{g})$ will classify all such structures from the view
point of the extension problem - here $V$ is a complement of $\mathfrak{g}$ in
$E$. A general product, called the unified product, is introduced as a tool for
our approach. The crossed (resp. bicrossed) products between two Leibniz
algebras are introduced as special cases of the unified product: the first one
is responsible for the extension problem while the bicrossed product is
responsible for the factorization problem. The description and the
classification of all complements of a given extension $\mathfrak{g} \subseteq
\mathfrak{E} $ of Leibniz algebras are given as a converse of the factorization
problem. They are classified by another cohomological object denoted by
${\mathcal H}{\mathcal A}^{2}(\mathfrak{h}, \mathfrak{g} \, | \,
(\triangleright, \triangleleft, \leftharpoonup, \rightharpoonup))$, where
$(\triangleright, \triangleleft, \leftharpoonup, \rightharpoonup)$ is the
canonical matched pair associated to a given complement $\mathfrak{h}$. Several
examples are worked out in details.
