<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:2.0cm 42.5pt 2.0cm 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="RU" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Dear Free IPA developers, <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Our team is working on the project based on the RHEL Virtualization and RHEL IdM server. It’s planned to run our software in enclosed internal enterprise network, and we would like to assign all the authentication and
 authorization tasks to the FreeIPA Python API. In fact we have already written this part of project on plain C; dialog with IdM server has been implemented over SSH interaction (libssh API + GNU flex). But some time ago we discovered FreeIPA API and since
 then we really want to migrate from C to Python. <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">So the time has come, but the problem is our complete ignorance of the Python programming language. We faced a problem trying to modify the tutorial script
<b><i>free-ipa-3.3.1/doc/python-api.py: </i></b>ldap2 was refused to import. Which module should be included in this case?
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">We use RHEL 6.4 desktop, all the IPA packages has 3.0.0-25 version.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">#!/usr/bin/python<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif""># -*- coding: utf-8 -*-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">from ipalib import api, errors<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">from ipalib import Command<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">from ipalib import Object<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">from ipalib import Str<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">from ipalib import output<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">from ipalib.plugins import baseldap<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">#Load environment<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">api.finalize()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">if api.env.in_server:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">    api.Backend.ldap2.connect(<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">        ccache=api.Backend.krb.default_ccname()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">     )<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">else:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">    api.Backend.xmlclient.connect()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">#Execute command<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">dn = api.Backend.ldap2.make_dn_from_attr(u'python_dev3', loginshell=u'/bin/sh', givenname=u'Python', sn=u'User', userpassword=u'redhat')<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">try:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">                api.Backend.user_add(dn)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">except</span><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">
</span><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">errors</span><span style="font-size:9.0pt;font-family:"Arial","sans-serif"">.</span><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">DuplicateEntry</span><span style="font-size:9.0pt;font-family:"Arial","sans-serif"">:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Arial","sans-serif"">               
</span><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">print</span><span style="font-size:9.0pt;font-family:"Arial","sans-serif"">("</span><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">Possibly duplicate…</span><span style="font-size:9.0pt;font-family:"Arial","sans-serif"">")<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">else:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:9.0pt;font-family:"Arial","sans-serif"">                print("User added…")</span><span lang="EN-US" style="font-size:10.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Errors:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="background:silver;mso-highlight:silver">ipa: INFO: trying https://ipa.dev.ru/ipa/xml<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="background:silver;mso-highlight:silver">Traceback (most recent call last):<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="background:silver;mso-highlight:silver">  File "./test.py", line 22, in <module><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="background:silver;mso-highlight:silver">    dn = api.Backend.ldap2.make_dn_from_attr(u'python_dev3', loginshell=u'/bin/sh', givenname=u'Python', sn=u'User', userpassword=u'redhat')<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="background:silver;mso-highlight:silver">AttributeError: 'NameSpace' object has no attribute 'ldap2'<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Thank you,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-fareast-language:RU">Виталий Исаев<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:gray;mso-fareast-language:RU">Инженер-программист<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:gray;mso-fareast-language:RU">Группа разработки и внедрения ПСЗИ<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:gray;mso-fareast-language:RU">Департамент информационной безопасности<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:gray;mso-fareast-language:RU">ОАО «Финтех»<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>