iterator über ldap3 dict

Django, Flask, Bottle, WSGI, CGI…
Antworten
yetanotherpythonnoob
User
Beiträge: 2
Registriert: Montag 14. Mai 2018, 10:06

Montag 14. Mai 2018, 10:22

hallo zusammen,

versuche schon seit zwei wochen eine übersicht eines ldap dirs in ein webformular/tabelle zu bringen. muss dazu sagen, ich habe noch keine einzige zeile python geschrieben bevor ich zu dieser angelegenheit verdonnert wurde, also total planlos. dementsprechend schnell ist die sache auch ziemlich eklig geworden.

also das dict sieht so aus.

Code: Alles auswählen

>>> conn.entries
[DN: cn=defaults,ou=SUDOers,ou=apps,dc=mydomain,dc=at - STATUS: Read - READ TIME: 2018-05-14T10:59:12.767401
    cn: defaults
, DN: cn=XDB_STAFF_2,ou=SUDOers,ou=apps,dc=mydomain,dc=at - STATUS: Read - READ TIME: 2018-05-14T10:59:12.768807
    cn: XDB_STAFF_2
    sudoCommand: /usr/bin/su -
                 /usr/bin/su - -c *
    sudoHost: ALL
    sudoUser: blue
              neydwa
              schama
              wimm
              oberwa
              flecal
              dattju
              etzean
              pomaan
, DN: cn=XDB_EXTERN,ou=SUDOers,ou=apps,dc=mydomain,dc=at - STATUS: Read - READ TIME: 2018-05-14T10:59:12.769131
    cn: XDB_EXTERN
    sudoCommand: /usr/bin/su - ora*
    sudoHost: ALL
    sudoUser: plesma
              wilsch
              reifwa
              renndo
              poelma
...
die table wos reinsoll

Code: Alles auswählen

{% extends "base.html" %}

{% block content %}


        <table id="sudo_tables" class="display">
    <thead>
        <tr>
            <th>Sudo Group</th>
            <th>Sudo User</th>
                                                <th>Sudo Command</th>
                                                <th>Sudo Host</th>
        </tr>
    </thead>
    <tbody>
        <tr>
                                        <td>{{ cn }}</td>
          <td>{{ sudoUser }}</td>
                                        <td>{{ sudoCommand }}</td>
                                        <td>{{ sudoHost }}</td>
        </tr>
    </tbody>
</table>


{% endblock %}

das habe ich bislang rumprobiert

Code: Alles auswählen

@app.route('/overview', methods = ['GET', 'POST'])
def overview():
    form = OverviewForm()
    searchParameters = { 'search_base':
                        'ou=SUDOers,ou=apps,dc=mydomain,dc=at',
                        'search_filter': '(objectclass=SudoRole)',
                        'attributes': ['cn', 'sudoUser', 'sudoCommand',
                                       'sudoHost'] }

    server = Server('lpgaixmgmtlx01.test.mydomain', get_info=ALL)
    conn = Connection(server, 'cn=roots,dc=mydomain,dc=at','blabla', auto_bind=True)
    conn.search(**searchParameters)


    for key, val in conn.entries.iteritems():

        cn = map(str,conn.entries.cn)
        sudoUser = map(str,conn.entries.sudoUser)
        sudoCommand = map(str,conn.entries.sudoCommand)
        sudoHost = map(str,conn.entries.sudoHost)

        return render_template('overview.html', cn = cn, sudoUser = sudoUser,
                           sudoCommand = sudoCommand, sudoHost = sudoHost, form
                          = form)

ergibt nur "AttributeError: 'list' object has no attribute 'iteritems'"

vielleicht hat ja jemand ne zündende idee...

lg

chris
Sirius3
User
Beiträge: 8423
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 14. Mai 2018, 11:00

@yetanotherpythonnoob: Deine Erwartung, was das ldap-Modul als Ergebnis liefert, stimmt nicht mit dem überein, was es tatsächlich liefert, nämlich kein Wörterbuch (was soll da auch der Schlüssel sein?), sondern eine Liste. Ein `return` in einer for-Schleife ist wohl auch nicht das, was Du Dir wünschst. Das `map` ist wohl eher auch geraten, als dass Du weißt, was da passiert. Am besten die Schleife direkt im Template umsetzen.
yetanotherpythonnoob
User
Beiträge: 2
Registriert: Montag 14. Mai 2018, 10:06

Montag 14. Mai 2018, 14:58

geraten ist noch übertrieben...
Antworten