Source

python-ldap / CHANGES

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
----------------------------------------------------------------
Released 2.3.4 2008-03-29

Changes since 2.3.3:

Modules/
* Fixed seg fault when calling LDAPObject.get_option()
  (see SF#1926507, thanks to Matej)

----------------------------------------------------------------
Released 2.3.3 2008-03-26

Changes since 2.3.2:

Fixed backward-compability when building with OpenLDAP 2.3.x libs.

----------------------------------------------------------------
Released 2.3.2 2008-03-26

Changes since 2.3.1:

Lib/
* ldap.dn.escape_dn_chars() now really adheres to
  RFC 4514 section 2.4 by escaping null characters and a
  space occurring at the beginning of the string
* New method ldap.cidict.cidict.__contains__()
* ldap.dn.explode_dn() and ldap.dn.explode_rdn()
  have a new optional key-word argument flags which is
  passed to ldap.dn.str2dn().

Modules/
* Removed unused OPT_PRIVATE_EXTENSION_BASE from constants.c

Doc/
* Various additions, updates, polishing (thanks to James).

----------------------------------------------------------------
Released 2.3.1 2007-07-25

Changes since 2.3.0:

* Support for setuptools (building .egg, thanks to Torsten)
* Support for matched values control (RFC 3876, thanks to Andreas)

Lib/
* Fixed ldif (see SF#1709111, thanks to Dmitry)
* ldap.schema.models:
  SUP now separated by $ (method __str__() of classes
  AttributeType, ObjectClass and DITStructureRule, thanks to Stefan)

Modules/
* Added constant MOD_INCREMENT to support
  modify+increment extension (see RFC 4525, thanks to Andreas)
----------------------------------------------------------------
Released 2.3.0 2007-03-27

Changes since 2.2.1:

* OpenLDAP 2.3+ required now to build.
* Added support for Cancel operation ext. op. if supported
in OpenLDAP API of the libs used for the build.

Modules/
* Removed deprecated code for setting options by name
* Added l_ldap_cancel()
* Some modifications related to PEP 353 for
  Python 2.5 on 64-bit platforms (see SF#1467529, thanks to Matej)
* Added new function l_ldap_str2dn(), removed functions
  l_ldap_explode_dn() and l_ldap_explode_rdn()
  (see SF#1657848, thanks to David)

Lib/
* Added method ldapobject.LDAPObject.cancel()
* ldap.schema.subentry.urlfetch() now can do non-anonymous
  simple bind if the LDAP URL provided contains extensions
  'bindname' and 'X-BINDPW'. (see SF#1589206)
* ldap.filter.escape_filter_chars() has new a key-word argument
  escape_mode now which defines which chars to be escaped
  (see SF#1193271).
* Various important fixes to ldapobject.ReconnectLDAPObject
* Moved all DN-related functions to sub-module ldap.dn,
  import them in ldap.functions for backward compability
* ldap.dn.explode_dn() and ldap.dn.explode_rdn() use the new
  wrapper function ldap.dn.str2dn() (related to SF#1657848)
* changetype issue partially fixed (see SF#1683746)

----------------------------------------------------------------
Released 2.2.1 2006-11-15

Changes since 2.2.0:

Modules/
* Fix for Python 2.5 free(): invalid pointer (see SF#1575329)
* passwd() accepts None for arguments user, oldpw, newpw
  (see SF#1440151)

Lib/
* ldif.LDIFWriter.unparse() now accepts instances of
  derived dict and list classes (see SF#1489898)

----------------------------------------------------------------
Released 2.2.0 2006-04-10

Changes since 2.0.11:

* OpenLDAP 2.2+ required now to build.

Modules/
* Dropped all occurences of '#ifdef #LDAP_VENDOR_VERSION'.
* Fixed wrong tuple size in l_ldap_result3() (see SF#1368108)
* Fixed get_option(ldap.OPT_API_INFO) (see SF#1440165)
* Fixed memory leak in l_ldap_result3() when all=0
  (see SF#1457325)
* Fixed memory leak in l_ldap_result3() in error cases
  (see SF#1464085)

Lib/
* Fixed ldap.schema.models.DITStructureRule.__str__() to
  separate SUP rule-ids with a single space instead of ' $ '
* Fixed ldap.async.Dict
* Added ldap.async.IndexedDict
* ldap.schema.subentry.SubSchema.attribute_types() has new
  key-word argument ignore_dit_content_rule
----------------------------------------------------------------
Released 2.0.11 2005-11-07

Changes since 2.0.10:

Lib/
* Class ldap.ldapobject.LDAPObject:
  Each method returns a result now
* Class ldap.ldapobject.ReconnectLDAPObject:
  Some methods called the wrong methods of LDAPObject. Fixed.
* Added new class ldap.async.Dict
* Slightly cleaned up ldap.schema.subentry.attribute_types()
* New sub-module ldap.resiter which simply provides a mix-in
  class for ldap.ldapobject.LDAPObject with a generator method
  allresults().
  Obviously this only works with Python 2.3+. And
  it's still experimental.

----------------------------------------------------------------
Released 2.0.10 2005-09-23

Changes since 2.0.9:

Lib/
* Switched back to old implementation of
  ldap.schema.tokenizer.split_tokens() since the new one
  had a bug which deletes the spaces from DESC
* ldap.INSUFFICIENT_ACCESS is now ignored in 
  ldap.ldapobject.LDAPObject.search_subschemasubentry_s()

----------------------------------------------------------------
Released 2.0.9 2005-07-28

Changes since 2.0.8:

Modules/
* Removed __doc__ strings from ldapcontrol.c to "fix"
  build problems with Python versions 2.2 and earlier.

----------------------------------------------------------------
Released 2.0.8 2005-06-22 at Linuxtag 2005, Karlsruhe, Germany

Changes since 2.0.7:

* Preliminary support for receiving LDAP controls added.
  Contributor:
  - Andreas Ames

Lib/
- Added classes in module ldif to ldif.__all__ to fix
  from ldif import *
- Removed BitString syntax from
  ldap.schema.models.NOT_HUMAN_READABLE_LDAP_SYNTAXES
  since the LDAP encoding is in fact human-readable
- ldapurl.LDAPUrlExtension.unparse() outputs empty string
  if LDAPUrlExtension.exvalue is None
- Added ldap.controls.SimplePagedResultsControl

----------------------------------------------------------------
Released 2.0.7 2005-04-29

Changes since 2.0.6:

* Added preliminary support for sending LDAP controls
  with a request.
  Contributors:
  - Deepak Giridharagopal
  - Ingo Steuwer
  (Receiving controls in LDAP results still not supported.)

Modules:
* LDAPObject.c: removed l_ldap_manage_dsa_it()
* LDAPObject.c: Added missing #ifdef around l_ldap_passwd()
  for compability with older OpenLDAP libs.

Lib/
* New algorithm in ldap.schema.tokenizer.split_tokens()
  contributed by Wido Depping which is more robust
  when parsing very broken schema elements
  (e.g. Oracle's OID).
* Fixed argument list (position of timeout) when calling
  LDAPObject.search_ext_s() from search_st() and search_s().
* LDAPObject.search_ext_s() correctly calls search_ext_s() now.
* Re-implemented LDAPObject.manage_dsa_it() without calling _ldap.

----------------------------------------------------------------
Released 2.0.6 2004-12-03

Changes since 2.0.5:

Lib/
* Added sub-module ldap.dn
* Added function ldap.dn.escape_dn_chars()
* Special check when implicitly setting SUP 'top' to
  structural object classes without SUP defined to avoid
  a loop in the super class chain.

----------------------------------------------------------------
Released 2.0.5 2004-11-11

Changes since 2.0.4:

Some small improvements for SASL:
The noisy output during SASL bind is avoided now. Interaction
with output on stderr can be enabled by the calling application
by explicitly defining SASL flags.

Removed obsolete directory Win32/.

Lib/
* Make sure that ldap.sasl.sasl.cb_value_dict is a dictionary
  even when the caller passes in None to argument cb_value_dict
* Added new key-word arg sasl_flags to method
  LDAPObject.sasl_interactive_bind_s()

Modules/
* l_ldap_sasl_interactive_bind_s():
  New key-word arg sasl_flags passed to
  ldap_sasl_interactive_bind_s()

----------------------------------------------------------------
Released 2.0.4 2004-10-27

Changes since 2.0.3:

Modules/
* Applied some fixes for 64-bit platforms to LDAPObject.c
* Constants ldap.TLS_AVAIL and ldap.SASL_AVAIL will indicate
  whether python-ldap was built with support for SSL/TLS
  and/or SASL

setup.py and Modules/
* Applied some fixes for building under Win32

----------------------------------------------------------------
Released 2.0.3 2004-10-06

Changes since 2.0.2:

* Added support for LDAP Password Modify Extended Operation
  (see RFC 3062)

Demo/:
* Added passwd_ext_op.py

Modules/
* Added l_ldap_passwd() in LDAPObject.c

Lib/
* Added methods passwd() and passwd_s() to
  ldap.ldapobject.LDAPObject

----------------------------------------------------------------
Released 2.0.2 2004-07-29

Changes since 2.0.1:

Modules/
* Fixed detecting appropriate OpenLDAP libs version for
  determining whether ldap_whoami_s() is available or not.
  This fixes build problems with OpenLDAP libs 2.1.0 up
  to 2.1.12.

----------------------------------------------------------------
Released 2.0.1 2004-06-29

Changes since 2.0.0:

dsml:
* Fixed wrong exception message format string

ldap.schema.models:
* Fixed Entry.__delitem__() to delete really everything
  when deleting an attribute dictionary item.

----------------------------------------------------------------
Released 2.0.0 2004-05-18

Changes since 2.0.0pre21:

ldif:
* Empty records are simply ignored in ldif.LDIFWriter.unparse()

Modules/
* New method result2() returns 3-tuple containing the msgid
  of the outstanding operation.

ldap.ldapobject:
* New _ldap wrapper method LDAPObject.result2() (see above)
  which is now used by LDAPObject.result().

----------------------------------------------------------------
Released 2.0.0pre21 2004-03-29

Changes since 2.0.0pre20:

setup.py:
* runtime_library_dirs is set

Modules/
* (Hopefully) fixed building with OpenLDAP 2.2 libs in errors.c
* Removed meaningless repr() function from LDAPObject.c
* Removed setting LDAP_OPT_PROTOCOL_VERSION in l_ldap_sasl_bind_s()
* Modified string handling via berval instead of *char
  in l_ldap_compare_ext() makes it possible to compare attribute
  values with null chars.
* Wrapped ldap_sasl_bind() for simple binds instead of ldap_bind()
  since 1. the latter is marked deprecated and 2. ldap_sasl_bind()
  allows password credentials with null chars.
* Removed unused sources linkedlist.c and linkedlist.h
* Function l_ldap_whoami_s() only added if built against
  OpenLDAP 2.1.x+ libs (should preserve compability with 2.0 libs)

ldap.ldapobject:
* LDAPObject.bind() only allows simple binds since Kerberos V4
  binds of LDAPv2 are not supported anymore. An assert statement
  was added to make the coder aware of that.
* Renamed former LDAPObject.sasl_bind_s() to
  LDAPObject.sasl_interactive_bind_s() since it wraps OpenLDAP's
  ldap_sasl_interactive_bind_s()

----------------------------------------------------------------
Released 2.0.0pre20 2004-03-19

Changes since 2.0.0pre19:

Modules/
* Removed doc strings from functions.c
* Removed probably unused wrapper function l_ldap_dn2ufn() since
  ldap_dn2ufn() is deprecated in OpenLDAP 2.1+
* Removed wrapper function l_ldap_is_ldap_url().
* Removed macro add_int_r() from constants.c since it caused
  incompability issues with OpenLDAP 2.2 libs
  (Warning: all result types are Integers now! Use the constants!)
* New wrapper function l_ldap_whoami_s()

ldap.ldapobject:
* New wrapper method LDAPObject.whoami_s()

ldap.functions:
* Removed is_ldap_url(). The more general function
  ldapurl.isLDAPUrl() should be used instead.

ldap.sasl:
* Added class cram_md5 (for SASL mech CRAM-MD5)

ldap.async:
* Use constants for search result types (see note about
  add_int_r() above).

----------------------------------------------------------------
Released 2.0.0pre19 2004-01-22

Changes since 2.0.0pre18:

Modules/
* LDAPObject.c:
  Most deprecated functions of OpenLDAP C API are not used anymore.
* functions.c:
  Removed unused default_ldap_port().
* constants.c:
  Removed unused or silly constants
  AUTH_KRBV4, AUTH_KRBV41, AUTH_KRBV42, URL_ERR_BADSCOPE, URL_ERR_MEM
* errors.c:
  Fixed building with OpenLDAP 2.2.x
  (errors caused by negative error constants in ldap.h)

ldap.ldapobject.LDAPObject:
* Removed unused wrapper methods uncache_entry(), uncache_request(),
  url_search(), url_search_st() and url_search_s()
* New wrapper methods for all the _ext() methods in _ldap.LDAPObject.

ldap.modlist:
* Some performance optimizations and simplifications
  in function modifyModlist()

----------------------------------------------------------------
Released 2.0.0pre18 2003-12-09

Changes since 2.0.0pre17:

ldap.ldapobject:
* Fixed missing ldap._ldap_function_call() in
  ReconnectLDAPObject.reconnect()

----------------------------------------------------------------
Released 2.0.0pre17 2003-12-03

Changes since 2.0.0pre16:

ldap.functions:
* Fixed ImportError when running python -O

----------------------------------------------------------------
Released 2.0.0pre16 2003-12-02

Changes since 2.0.0pre15:

Modules/
* Removed definition of unused constant RES_EXTENDED_PARTIAL since
  the corresponding symbol LDAP_RES_EXTENDED_PARTIAL seems to not
  be available in OpenLDAP-HEAD (pre 2.2) anymore.

All in Lib/
* Fixed some subtle bugs/oddities mentioned by pychecker.

dsml:
* Renamed DSMLWriter._f to DSMLWriter._output_file
* Added wrapper method DSMLWriter.unparse() which simply
  calls DSMLWriter.writeRecord()

ldap.ldapobject:
* Simplified LDAPObject.search_subschemasubentry_s()

ldap.functions:
* Moved ldap._ldap_function_call() into ldap.functions.
* apply() is not used anymore since it seems deprecated

ldap.async:
* Added class DSMLWriter

ldap.schema:
* Removed unused key-word argument strict from
  ldap.schema.subentry.SubSchema.attribute_types()
* Fixed backward compability issue (for Python prior to 2.2) in
  ldap.schema.subentry.SubSchema.listall()
----------------------------------------------------------------
Released 2.0.0pre15 2003-11-11

Changes since 2.0.0pre14:

Modules/
Follow rule "Always include Python.h first"

ldap.schema.subentry:
* Added new method SubSchema.get_structural_oc()
* Added new method SubSchema.get_applicable_aux_classes()
* Methods SubSchema.listall() and SubSchema.tree() have
  new key-word argument schema_element_filters
* Support for DIT content rules in SubSchema.attribute_types()

----------------------------------------------------------------
Released 2.0.0pre14 2003-10-03

Changes since 2.0.0pre13:

setup.py:
* Some modifications to ease building for Win32
* Added directory Build/ mainly intended for platform-specific
  examples of setup.cfg
* Fixed installing ldap.filter

ldap.ldapobject:
* Added class attribute LDAPObject.network_timeout mapped to
  set_option(ldap.OPT_NETWORK_TIMEOUT,..)
* LDAPObject.search_ext(): Pass arguments serverctrls,clientctrls
  to _ldap.search_ext()

ldap.sasl:
* Added class ldap.sasl.external for handling
  the SASL mechanism EXTERNAL
* Dictionary ldap.sasl.saslmech_handler_class built during import
  for all the known SASL mechanisms derived from class definitions

ldap.schema:
* More graceful handling of KeyError in SubSchema.attribute_types()
* New method SubSchema.get_inheritedattr() for retrieving inherited
  class attributes
* New method SubSchema.get_inheritedobj() for retrieving a
  schema element instance including all inherited class attributes

----------------------------------------------------------------
Released 2.0.0pre13 2003-06-02

Changes since 2.0.0pre12:

ldap.async:
* Checking type of argument writer_obj relaxed in
  LDIFWriter.__init__() since file-like objects are
  not necessarily an instance of file.

ldap.schema:
* ldap.schema.subentry.SubSchema.attribute_types() now correctly
  handles attribute types without NAME set
* If SUP is not defined for a structural object class 'top' is
  assumed to be the only super-class by default
* '_' is now the abstract top node in SubSchema.tree() for all
  schema element classes since ABSTRACT and AUXILIARY object
  classes are not derived from 'top' by default

----------------------------------------------------------------
Released 2.0.0pre12 2003-05-27

Changes since 2.0.0pre11:

New sub-module ldap.filter:
* Added functions escape_filter_chars() and filter_format()

ldap.ldapobject:
* Trace log writes LDAP URI of connection instead of module name
* search_s() passes self.timeout as argument timeout when
  calling search_ext_s()
* Key-word arguments for simple_bind() and simple_bind_s()
  with defaults for anonymous bind.
* LDAPObject.protocol_version is set to LDAPv3 as default
  (this might make code changes necessary in a real LDAPv2
   environment)
* Default for key-word argument trace_stack_limit passed to
  __init__() is 5
* Updated __doc__ strings
* Aligned and tested ReconnectLDAPObject and SmartLDAPObject

ldap.async:
* LDIFWriter uses ldif.LDIFWriter instead of calling
  function ldif.CreateLDIF
* LDIFWriter accepts either file-like object or ldif.LDIFWriter
  instance as argument for specifying the output

ldif:
* Abandoned argument all_records of LDIFRecordList.__init__()

ldapurl:
* urllib.unquote() used instead of urllib.unquote_plus()

----------------------------------------------------------------
Released 2.0.0pre11 2003-05-02

Changes since 2.0.0pre10:

ldap.ldapobject:
* Cosmetic change: Named argument list for LDAPObject.compare()
  instead of *args,**kwargs.
* Fixed bug in ReconnectLDAPObject._apply_method_s() affecting
  compability with Python 2.0. The bug was introduced with
  2.0.0pre09 by dropping use of apply().

ldap.modlist:
* modifyModlist(): Only None is filtered from attribute value lists,
  '' is preserved as valid attribute value. But filtering applies
  to old_value and new_value now.

ldap.schema:
* Zero-length attribute values for schema elements are ignored
  (needed on e.g. Active Directory)

dsml:
Added support for parsing and generating DSMLv1.
Still experimental though.


----------------------------------------------------------------
Released 2.0.0pre10 2003-04-19

Changes since 2.0.0pre09:

ldap.schema:
* Emulate BooleanType for compability with Python2.3 in assert
  statements

----------------------------------------------------------------
Released 2.0.0pre09 2003-04-19

Changes since 2.0.0pre08:

Modified setup.py to support Cyrus-SASL 2.x.

ldap.ldapobject:
* apply() is not used anymore since it seems deprecated
* Fixed __setstate__() and __getstate__() of ReconnectLDAPObject

ldap.schema:
* Completed classes for nameForms, dITStructureRules and
  dITContentRules

----------------------------------------------------------------
Released 2.0.0pre08 2003-04-11

Changes since 2.0.0pre07:

ldap.schema:
* For backward compability with Python versions prior to 2.2
  Lib/ldap/schema/tokenizer.py and Lib/ldap/schema/models.py use
  (()) instead of tuple() for creating empty tuples.

----------------------------------------------------------------
Released 2.0.0pre07 2003-04-03

Changes since 2.0.0pre06:

LDAPObject.c:
  * Wrapped OpenLDAP's ldap_search_ext()
  * Removed empty __doc__ strings
  * Removed fileno
  * Removed all stuff related to caching in OpenLDAP libs

ldap.ldapobject:
  * Fixed SASL rebind in ldap.ldapobject.ReconnectLDAPObject
  * use search_ext() instead ldap_search()
  * new class attribute timeout for setting a global time-out
    value for all synchronous operations

ldap.schema:
* Fixed two typos in ldap.schema.models
* Some attempts to improve performance of parser/tokenizer
* Completely reworked to have separate OID dictionaries for
  the different schema element classes
* Fixed the Demo/schema*.py to reflect changes to ldap.schema

Documentation updates and various __doc__ string modifications.

ldapurl:
  * Removed all Unicode stuff from module ldapurl
  * Consistent URL encoding in module ldapurl

ldif:
  * Removed ldif.FileWriter
  * Proper handling of FILL (see RFC 2849)

----------------------------------------------------------------
Released 2.0.0pre06 2002-09-23

Changes since 2.0.0pre05:
- Fine-grained locking when linking against libldap_r
- New wrapper class ldap.ReconnectLDAPObject
- Security fix to module ldapurl
- Other fixes and improvements to whole package
- LDAPv3 schema support
  (still somewhat premature and undocumented)

----------------------------------------------------------------
Released 2.0.0pre05 2002-07-20

----------------------------------------------------------------
Released 2.0.0pre04 2002-02-09

----------------------------------------------------------------
Released 2.0.0pre02 2002-02-01

----------------------------------------------------------------
Released 1.10alpha3 2000-09-19

$Id$
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.